前言
本文主要记录如何使用开源项目acme.sh 来自动化我们网站的证书续期.
本文采用的方式: DNS 验证 如需其他方式请看官方文档
域名解析提供商: cloudflare 所以需要它的注册邮箱和Global API Key或者某域名下的区域 ID和户 ID
由于网上已有类似内容(但质量,不好说),故本文尽可能表述清晰,易懂,易操作.手把手帮助大家进行相关操作.
安装
1 | curl https://get.acme.sh | sh -s email=your@example.com |
获取令牌
使用全局 API 密钥
登录到您的 Cloudflare 帐户以获取您的API 密钥.
注意⚠️:生成的令牌不会存储在 cloudflare 帐户中,故你需要存储到安全的地方.另外,注意过期时间的设置,建议永久但要确保存储位置安全以及及时删除剪贴板中的密钥(某些程序和APP会读取剪贴板)等.

1 | export CF_Key="*****" |
注意清除命令的历史记录(建议定期清除).
1 | bash |
或者暴力方式:rm ~/.bash_history && rm ~/.zsh_history
使用区域API令牌
此方法不做详细介绍,可以查看官方介绍如何使用 DNS API
令牌当前需要在所有区域中访问对 Zone.Zone 的读取访问权限和对 Zone.DNS 的写入访问权限。有关详细信息,请参阅问题 #2398
生成并安装证书
本文采用的是DNS验证方式,如需http方式请看官方文档.
1 | acme.sh --issue --dns dns_cf -d example.com -d www.example.com |
例如:

证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方.
注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件,因为目录结构可能会变化.
Apache example:
1 | acme.sh --install-cert -d example.com \ |
Nginx example:
1 | acme.sh --install-cert -d example.com \ |
没有service命令也可用:systemctl restart nginx.service
注意⚠️,运行命令之前,请先检查路径是否存在,否则请运行命令 mkdir -p yourpath(你的路径)
若你要申请泛域名
命令参考:
1 | acme.sh --issue --dns dns_cf -d "*.lanyundev.com" |
1 | acme.sh --install-cert -d "*.lanyundev.com" \ |
其余相关命令
查看已安装证书信息
1 | acme.sh --info -d example.com |
更新证书
目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.
请确保 cronjob 正确安装, 看起来是类似这样的:
1 | crontab -l |
更新 acme.sh
目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.
升级 acme.sh 到最新版 :
1 | acme.sh --upgrade |
如果你不想手动升级, 可以开启自动升级:
1 | acme.sh --upgrade --auto-upgrade |
之后, acme.sh 就会自动保持更新了.
你也可以随时关闭自动更新:
1 | acme.sh --upgrade --auto-upgrade 0 |
查看证书列表
1 | acme.sh --list |
删除证书
1 | acme.sh --remove -d example.com |
出错怎么办:
如果出错, 请添加 debug log:
1 | acme.sh --issue ..... --debug |
或者:
1 | acme.sh --issue ..... --debug 2 |
请参考: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
最后, 本文并非完全的使用说明, 还有很多高级的功能, 更高级的用法请参看其他 wiki 页面.













