Skip to content

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

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,并保存到密码管理器或其他受控位置;请勿将真实 Token 写入文档或提交到仓库。

2.3. 区域 ID 和账户 ID

CloudFlare区域ID和账户ID位置

2.4. 申请 SSL 域名证书

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

# 以下二选一
# 单个域名:上述区域ID值
export CF_Zone_ID="YOUR_CLOUDFLARE_ZONE_ID"
# 多个域名:上述账户ID值
# export CF_Account_ID="YOUR_CLOUDFLARE_ACCOUNT_ID"
  • 配置以上环境变量后,手动执行申请
bash
# 以下申请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 访问是否正常。以下供参考:

bash
        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配置示例

lidong 文档中心 · 清晰、可靠、持续维护