使用acme.sh配置ssl证书并自动续签
Words: 851Read Time: 3 minLast edited: 2026-6-3
使用acme.sh配置SSL证书并自动续签
参考官网
acme.sh用于生成免费的ssl证书,其完整实现了acme协议,并且由纯Shell脚本语言编写,没有过多的依赖项,安装和使用都非常方便。
本文使用Let's Encrypt
准备环境:
- 域名
- Linux版本
Ubuntu22.04
- 代理服务器
Nginx1.18.0
- acem.sh
下载安装acme.sh
使用这个安装干了些啥
- 部署acme.sh程序到用户文件夹
- 为脚本创建新名称
acme.sh=~/.acme.sh/acme.sh
需重启终端,不想重启的话.acme.sh# alias acme.sh=~/.acme.sh/acme.sh
- 创建一个每日定时任务,用于自动更新即将过期的证书
通过
crontab -l 查看:安装后目录
具体命令可查看官网
使用acme.sh配置ssl证书
直接指向项目
-d参数指定域名,多个域名使用多个-d参数,第一个-d参数指定的域名即证书的主体名称,其它-d参数指定的域名为证书的可选主体名称。
-w参数指定的是域名的webroot目录,以example.com为例,-w参数的值即是http://example.com对应的webroot目录。如果使用多个-d参数同时指定了多个域名,则所有这些域名必须对应同一个webroot目录;另外,当前系统用户必须具有webroot目录的写入权限。
DNS自动模式(建议)
此方法会向域名解析平台添加一个TXT记录值,需要提供对应平台的Key和Secret,具体参考acme.sh/dnsapi/dns_ali.sh at master · acmesh-official/acme.sh (github.com) 我使用的是dns_ali。
默认的签发平台是ZeroSSL,我使用的时候想着就用默认的平台,可是一直报错et authz objec with invalid status, please try again later.github上有人说是ZeroSSL的dns身份认证出问题了。This domain won't issue · Issue #4991 · acmesh-official/acme.sh (github.com) 所以我换成了用letsencrypt
获取阿里云的Key和Secret,添加到系统环境变量
生成证书
该命令从系统变量中读取aliyun的api授权ID和密码,并通过dns_ali参数指定DNS提供商为阿里云。该命令将通过api自动为指定域名添加txt记录,并在验证完毕后自动移除txt记录。
aliyun的api授权ID和密码将被保存在.acme.sh的账户配置文件中,以供将来自动更新证书时使用,存储位置为:
~/.acme.sh/account.conf通过
--install-cert部署证书使用
acme.sh --list查看证书列表Nginx 部署
在项目对应的Nginx配置文件中添加
不同的项目配置不同的域名和路径即可,使用泛域名的话就不用重新申请证书
Loading...