acme.sh 说明
acme.sh 实现了 acme 协议, 可以从 letsencrypt 以及 ZeroSSL 生成免费的证书.
主要步骤:
- 安装 acme.sh
- 生成证书
- copy 证书到 nginx/apache 或者其他服务
- 更新证书
- 更新 acme.sh
安装 acme.sh
acme.sh
实现了 acme 协议, 可以帮助你快速申请SSL证书,自动更新证书等操作,极大简化操作步骤。
在使用之前,我们需要先安装,以下命令均在 Linux 系统完成。
1
2curl https://get.acme.sh | sh
source ~/.bashrc或者
1
wget -O - https://get.acme.sh --no-check-certificate| sh
使用curl命令安装的第一次出现了如图的错误,提示可以先安装 socat ,因为我不需要,所以没有安装。curl安装失败,可以使用wget命令尝试。
设置为自动更新(可选):
1
acme.sh --upgrade --auto-upgrade
安装 acme 完成后使用
acme.sh -v
命令查看版本号,代码如下:1
2
3
4# acme.sh -v
https://github.com/acmesh-official/acme.sh
v3.0.7更换默认服务商为 ZeroSSL
1
2
3
4# acme.sh --set-default-ca --server zerossl
[Wed Sep 27 15:42:01 CST 2023] Changed default CA to: https://acme.zerossl.com/v2/DV90
获取 AccessKey 和 AccessSecret
登录阿里云的RAM访问控制后台,根据阿里云的安全建议,在没有普通访问控制用户的情况下,新建一名用户,给其分配“管理云解析(DNS)”的权限,获取其AccessKey和AccessSecret并记录下来,而不是继续使用 “超级管理员” 的 AccessKey 和 AccessSecret。
确保 apache的mod_ssl 模块功能正常。如果没有安装 mod_ssl 模块,安装:
1
yum -y install mod_ssl
依次执行以下命令生成证书
1
2
3
4
5
6# 替换成从阿里云后台获取的密钥
export Ali_Key="刚才记录的AccessKey"
export Ali_Secret="刚才记录的AccessSecret"
# 把test.com换成自己的域名
acme.sh --issue --dns dns_ali -d 59izt.com -d *.59izt.com如果报错无法访问 google DNS,需要配置代理
1
export http_proxy=http://10.1.10.54:8888;export https_proxy=http://10.1.10.54:8888
申请完成后屏显会输出证书路径
- 证书是: 59izt.com.cer
- 密匙是: 59izt.com.key
copy/安装 证书
前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件, 例如: 不要直接让 nginx/apache 的配置文件使用这下面的文件. 这里面的文件都是内部使用, 而且目录结构可能会变化.
正确的使用方法是使用
--install-cert
命令,并指定目标位置, 然后证书文件会被copy到相应的位置, 例如:1
2
3
4
5
6
7
8
9
10
11
12# Apache example:
acme.sh --install-cert -d example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
# Nginx example:
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"例如生成 Nginx 需要的证书文件
1
2
3
4
5
6acme.sh --install-cert -d 59izt.com --key-file /root/certs/59izt.com_key.pem --fullchain-file /root/certs/59izt.com_cert.pem
# 输出如下
[Wed Sep 27 17:47:49 CST 2023] The domain '59izt.com' seems to have a ECC cert already, lets use ecc cert.
[Wed Sep 27 17:47:49 CST 2023] Installing key to: /root/certs/59izt.com_key.pem
[Wed Sep 27 17:47:49 CST 2023] Installing full chain to: /root/certs/59izt.com_cert.pem