由于各大厂商对免费SSL证书的期限限制只有3个月,对于买不起SSL证书的博主来说每3个月就要更换一次证书。如果每次都需要手动申请、更换,无疑是一个很繁琐的工作。本文主要介绍通过ACME工具自动申请证书方案
参考来源:
1.ACME v2证书自动化快速入门 (freessl.cn)
2.ACME 客户端 – Let’s Encrypt – 免费的SSL/TLS证书 (letsencrypt.org)
安装acme.sh
建议切换到root账号下执行如下命令:
curl https://get.acme.sh | sh -s email=my@example.com
如果速度过慢,也可以通过国内镜像源安装:
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=my@example.com
注意:上述email=参数表示部署的账号,写上自己的邮箱账号即可。
默认安装在~/.acme.sh/目录(~表示用户主目录),同时自动设置了一条cron定时任务,类似如下:
1 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
同时自动配置了acme.sh的alias:
alias acme.sh='/root/.acme.sh/acme.sh'
验证域名
可以进行自动化验证,也可以手动进行验证。以freessl.cn为例,可以通过域名CNAME记录验证,也可以采用文件验证。
然后进入域名管理系统(自己购买域名的服务商或者授权的DNS服务商)添加上述CNAME记录:
阿里云解析设置界面
正确配置后立即检测,即可获得相关配置命令:
证书申请配置
在系统上执行上述acme.sh的部署命令,即可进行证书部署。
acme.sh --issue -d www.mailabc.cn --dns dns_dp --server https://acme.freessl.cn/v2/DV90/directory/xxxxxx
注意图中打码的部分是针对这个申请的专属ACME地址,不要泄露。部署完成后,在~/.acme.sh/目录下会生成域名目录,如~/.acme.sh/www.mailabc.cn/,这里存放申请的证书文件。
配置证书
针对Apache服务器,可以参考如下命令部署证书:
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服务器,可以参考如下命令部署证书:
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"
注意:上述reloadcmd需要根据Linux系统版本不同稍作修改,比如通过systemctl而不是service。
针对上面的命令,可以保存到一个脚本文件中,做一个定时任务自动执行。这样就可以享受证书自动续期了。