1. 安装 acme.sh
- 安装很简单,一条命令(国外):
curl https://get.acme.sh | sh -s email=my@example.com或者
wget -O - https://get.acme.sh | sh -s email=my@example.com- 通过gitee(国内)
git clone https://gitee.com/neilpang/acme.sh.git cd acme.sh ./acme.sh --install -m my@example.com- (可选)
创建 一个
shell的alias,例如.bashrc,方便你的使用:alias acme.sh=~/.acme.sh/acme.sh - 自动为你创建
cronjob, 每天 0:00 点自动检测所有的证书,如果快过期了,需要更新,则会自动更新证书。
crontab -l2. 获取API Token
由于acme.sh对域名解析/提供商的支持十分广泛,所以请针对自己所在的域名提供商获取对应的API Token。
支持列表:点我跳转
-
腾讯的DNSPod
- 登录DNSPod,进入顶部导航栏里的用户中心,在左侧的导航栏里,找到安全设置,看到页面的最下面,有个
API Token.点击查看->创建API Token->填写Tokens名称,复制好ID与Token即可.保存待用。
- 登录DNSPod,进入顶部导航栏里的用户中心,在左侧的导航栏里,找到安全设置,看到页面的最下面,有个
-
阿里云域名
- 需要登录到阿里云官网获取
Ali_Key和Ali_Secret。点击此处跳转
- 需要登录到阿里云官网获取
-
获取到对应的API Token之后我们需要将id和key设置为环境变量,供acme.sh调用:
# DNSPodexport DP_Id="你的 API ID"export DP_Key="你的 Token"# aliyunexport Ali_Key="你的 AccessKey ID"export Ali_Secret="你的 AccessKey Secret"如果你的域名提供商不是DNSPod或者阿里云,其他域名提供商变量名一览表:变量名一览表
临时环境变量只需配置这一次即可,当成功申请证书后,API 信息会被自动保存在~/.acme.sh/account.conf里,下次你使用acme.sh的时候系统会自动读取并使用。
3.生成证书
- 修改默认 CA
- acme.sh 脚本默认 CA 服务器是 ZeroSSL,有时可能会导致获取证书的时候一直出现:Pending,The CA is processing your order,please just wait.
只需要把 CA 服务器改成 Let’s Encrypt 即可,虽然更改以后还是有概率出现 pending,但基本 2-3 次即可成功
acme.sh --set-default-ca --server letsencrypt- 自动验证(DNS API)
# DNSPodcd ~/.acme.sh/# 或者 alias acme.sh=~/.acme.sh/acme.shacme.sh --issue --dns dns_dp -d example.com -d *.example.com# 多个域名只需要"-d 你的域名"即可
# aliyuncd ~/.acme.sh/# 或者 alias acme.sh=~/.acme.sh/acme.shacme.sh --issue --dns dns_ali -d example.com -d *.example.com4.安装证书到 Nginx服务
证书生成好以后,我们需要把证书复制给对应的Nginx服务器去使用。
必须使用 --install-cert 命令来把证书复制到目标文件,请勿直接使用 ~/.acme.sh/ 目录下的证书文件,这里面的文件都是内部使用,而且目录结构将来可能会变化。
Nginx 示例:
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 reload"-
key-file证书的key存放路径 -
fullchain-file证书的cer存放路径 -
reloadcmd重装nginx命令,需要适当调整比如nginx -s reload
Nginx 的配置项 ssl_certificate 需要使用 fullchain.cer ,而非 <domain>.cer ,否则 SSL Labs 的测试会报证书链问题(Chain issues Incomplete)。
默认情况下,证书每 60 天更新一次(可自定义)。更新证书后,Nginx 服务会通过 reloadcmd 传递的命令自动重载配置。
5. 更新证书
目前证书每 60 天自动更新,你无需任何操作。
但是你也可以强制续签证书:
acme.sh --renew -d example.com --force出错怎么办
如果出错,请添加 —debug 参数输出详细的调试信息:
acme.sh --issue ..... --debug
或者输出更详细的信息:
acme.sh --issue ..... --debug 2