部署ACME申请SSL免费证书

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书。通过创建 cronjob , 科实现每天 0:00 点自动检测所有的证书, 如快过期, 需要更新, 则会自动更新证书。


部署 ACME

[root@dev-rocky9-shanghai-area2 ~]#  curl https://get.acme.sh | sh
[root@dev-rocky9-shanghai-area2 ~]#  source ~/.bashrc # /root/.acme.sh
[root@dev-rocky9-shanghai-area2 ~]#  acme.sh --upgrade --auto-upgrade # 配置 ACME自动更新

获取 Aliyun AccessKey ID 和 Aliyun AccessKey Secret

AccessKey ID 和 AccessKey Secret 是访问阿里云 API 的密钥,具有该账户完全的权限,需要妥善保管,长时间不使用请禁用或者删除处理。


使用acme.sh 申请证书

在命令 acme.sh –issue –dns dns_ali -d example.com -d .example.com 中,.example.com 表示这是一个通配符证书,覆盖了所有以 example.com 结尾的子域。例如 uat.example.com、dev.example.com 或任何其他子域,只要它们属于 example.com,这个泛域名证书都是有效的。当用户访问这些子域时,浏览器将能够正确地验证 SSL/TLS 证书,并建立安全的 HTTPS 连接。

[root@dev-rocky9-shanghai-area2 ~]# export Ali_Key="AK" # 此处 APPID 应从 阿里云RAM 中获取
[root@dev-rocky9-shanghai-area2 ~]# export Ali_Secret="SK" # 此处 APPkey 应从 阿里云RAM 中获取
[root@dev-rocky9-shanghai-area2 ~]# acme.sh --issue --dns dns_ali -d example.com -d *.example.com # 申请泛域名证书,证书和密钥文件通常会被保存在~/.acme.sh/目录下的相应子目录中,acme.sh生成的证书和密钥文件格式已经是标准的PEM格式,可以直接被Nginx使用
[root@dev-rocky9-shanghai-area2 ~]# openssl x509 -inform PEM -in example.com.cer -out example.com.crt # cer转换crt,有两种 CER证书编码类型,DER 和 Base64,当类型DER返回错误加载证书(asn1编码例程)时,尝试PEM并且它应该工作
[root@dev-rocky9-shanghai-area2 example.com]# openssl x509 -in example.com.crt -noout -text | less # 验证证书信息,查看Issuer信息和Subject信息是否正确
[root@dev-rocky9-shanghai-area2 ~]# cp /root/.acme.sh/example.com/example.com.cer /etc/nginx/example.com.pem # 遵循文件命名约定
[root@dev-rocky9-shanghai-area2 ~]# cp /root/.acme.sh/example.com/example.com.key /etc/nginx/example.com.key # 遵循文件命名约定

通常情况下,Nginx需要的是包含中间证书的全链证书,不仅是包含站点证书的文件。应该使用fullchain.cer文件作为证书文件

[root@dev-rocky9-shanghai-area2 ~]# cp /root/.acme.sh/example.com/fullchain.cer /etc/nginx/www.example.com.pem # 复制全链证书文件

关于 wiki

本文实例并非完全的使用说明, 还有很多高级的功能, 更高级的用法请参看其他 wiki 页面.

上一篇
下一篇