acme.sh是实现ACME客户端协议的纯Unix shell脚本。ACME(自动化证书管理环境)是一种协议,用于自动化证书颁发机构与其用户的web服务器之间的交互。它用于为HTTPS加密颁发和续订SSL/TLS证书。
用这个工具可以免费申请并获得SSL证书,而且这个证书可以定时自动更新。一次配置终生受益,这里以nginx环境做以下说明。
官方的中文说明:
https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E
首先是安装脚本客户端:
<pre wget -O - https://get.acme.sh | sh -s email=my@example.com
经过脚本执行,会在你当前账户的家目录下创建一个隐藏的目录.acme.sh。并且自动创建一个cronjob,自动每天0点检测证书并每60天更新一次证书。这个目录里面有一些配置和执行文件。
官网介绍了生成证书的两种验证签发模式,包括http的验证签发和DNS的验证签发。我们选择后一种。
自动验证(DNS API)
DNS 方式的真正强大之处在于可以使用域名解析商提供的 API 自动添加 TXT 记录,且在完成验证后删除对应的记录。
acme.sh 目前支持超过一百家的 DNS API。
具体支持哪些DNS API可以去这里查看:
https://github.com/acmesh-official/acme.sh/wiki/dnsapi
接着去DNS解析平台获取API Key和ID,记得保存好。后面就是进入最后的申请签发准备(dnspod为例,这里的Key和ID换成对应平台申请的内容):
export DP_Id="62100" export DP_Key="f4d4b2a300fb1b92b32e8d13e7ddb777"
在终端输入上面的配置之后,.acme.sh目录下面的account.conf文件会写入:
SAVED_DP_Id='62100' SAVED_DP_Key='f4d4b2a300fb1b92b32e8d13e7ddb777'
后续的签发更新不需要我们再输入。
以上准备工做完毕之后进入申请签发环节:
[root@server /]cd ~/.acme.sh ./acme.sh --issue --dns dns_dp -d chaihongjun.me -d *.chaihongjun.me
进入.acme.sh目录执行上面的脚本。
如果脚本在执行之后出现错误,请重新加参数 --debug 2 再执行一次看一下具体的报错信息,然后去github查询解决方案。
证书是默认生成在.acme.sh目录内,直接使用不妥:
证书生成好以后,我们需要把证书复制给对应的 Apache、Nginx 或其他服务器去使用。
必须使用 --install-cert 命令来把证书复制到目标文件,请勿直接使用 ~/.acme.sh/ 目录下的证书文件,这里面的文件都是内部使用,而且目录结构将来可能会变化。
所以需要复制证书给服务器使用:
./acme.sh --installcert -d chaihongjun.me -d *.chaihongjun.me \ --cert-file /usr/local/nginx/conf/ssl/chaihongjun.me/chaihongjun.me.cer \ --key-file /usr/local/nginx/conf/ssl/chaihongjun.me/chaihongjun.me.key \ --ca-file /usr/local/nginx/conf/ssl/chaihongjun.me/ca.cer \ --fullchain-file /usr/local/nginx/conf/ssl/chaihongjun.me/fullchain.cer \ --reloadcmd "service nginx force-reload"
记得网站那里的配置需要更新:
ssl_trusted_certificate /usr/local/nginx/conf/ssl/chaihongjun.me/fullchain.cer; ssl_certificate /usr/local/nginx/conf/ssl/chaihongjun.me/fullchain.cer; ssl_certificate_key /usr/local/nginx/conf/ssl/chaihongjun.me/chaihongjun.me.key;
所有的配置完成,最后需要nginx重载一下。以上全部完成之后,证书签发和配置都完成了。
关于其他的一些说明:
如果你需要再次添加新的域名签发证书公用,那就需要使用--force参数:
./acme.sh --issue --dns dns_dp -d example.me -d *.example.me --force
原本已经签发过example.com证书,这里增加通配符域名证书,所以需要强制再次签发。
如果你需要手动强制更新证书:
./acme.sh --renew -d example.me -d *.example.me --force
如果不想客户端自动升级:
./acme.sh --upgrade --auto-upgrade 0
查看客户端当前版本:
./acme.sh --version
更多信息查看官网