如何使用 Acme.sh 自动更新 Nginx 网站证书

温馨提示

本文由用户 biebiele 撰写,并已加入 VPS.Town 优秀原创文章激励计划,未经允许不得转载。

本文已通过 VPS.Town 社区文章投稿及奖励规则 (试行稿) 审核,并获得 -- 奖励。

📖 本文目录
介绍

Acme.sh 是一个纯粹用 Shell(Unix shell)语言编写的 ACME 协议客户端。可自动帮您申请 SSL 证书并自动更新。

1. acme.sh 安装

bash
# 将 my@example.com 换成您自己的邮箱地址
curl https://get.acme.sh | sh -s email=my@example.com
小贴士

安装完成后,程序安装在/root/.acme.sh/下,且可在任何地方使用acme.sh命令

acme.sh安装完成界面

2. 使用 CloudFlare DNS api 验证

2.1. 添加您的域名到 CloudFlare

  • 账户主页-添加域:按照页面指示添加您的个人域名 CloudFlare添加域名界面

  • 选择计划:选择下方的free计划,点击继续 CloudFlare选择免费计划界面

  • dns记录:会自动导入已有的 dns 记录,检查没什么问题,点击继续 CloudFlare DNS记录导入界面

  • 更新名称服务器:根据指引,在您域名之前网站,修改 ns 记录。主要删除原来的 dns 锁定和删除并添加新的 ns 记录 CloudFlare更新名称服务器界面

  • 验证:修改完成后,检查添加状态是否正常,如不正常,可手动最下方立即检查或手动检查添加过程是否正确 CloudFlare域名验证界面

2.2. 创建 API 令牌

CloudFlare API令牌创建入口

  • 点击创建令牌 CloudFlare创建令牌界面
  • 选择使用模版 编辑区域dns CloudFlare选择API模板界面
  • 权限配置 CloudFlare API权限配置界面
  • 确定创建令牌 CloudFlare确认创建令牌界面
  • 复制生成的 token 值 CloudFlare API令牌生成结果

2.3. 区域 ID 和账户 ID

CloudFlare区域ID和账户ID位置

2.4. 申请 SSL 域名证书

# API令牌:上述步骤获取的令牌token值
export CF_Token="Y_jpG9AnfQmuX5Ss9M_qaNab6SQwme3HWXNDzRWs"

# 以下二选一
# 单个域名:上述区域ID值
export CF_Zone_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
# 多个域名:上述账户ID值
# export CF_Account_ID="763eac4f1bcebd8b5c95e9fc50d010b4"
  • 配置以上环境变量后,手动执行申请
# 以下申请ssl通配证书,根据提示操作
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'
小贴士

设置和使用的任何环境变量都将保存在 ~/.acme.sh/account.conf

检查脚本执行日志,是否获取证书正常,提示证书文件保存在何地 acme.sh证书申请成功界面

  • 后续定期更新,是由计划任务 cron 里的定期检查和自动更新 acme.sh自动更新计划任务

3. nginx 等程序配置 ssl

nginx.conf配置文件,添加 ssl 相关配置并重启服务,浏览器检查 https 访问是否正常。以下供参考:

        ssl_certificate      /opt/ssl_cert.pem;
        ssl_certificate_key /opt/ssl_key.pem;

        ssl_protocols             TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers               ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305;
        ssl_ecdh_curve            secp521r1:secp384r1:secp256r1:x25519;

Nginx SSL配置示例