使用acme.sh自动续签https证书
Acme.sh 基于 ACME 协议(Automatic Certificate Management Environment)工作,该协议由Let's Encrypt提出并广泛采用
ACME 协议允许用户通过自动化的方式获取和管理SSL/TLS证书,而不需要手动进行复杂的证书请求、验证和安装过程
Acme.sh 提供了一系列命令和选项,可以与各种证书颁发机构(包括Let's Encrypt)进行交互,并自动处理证书申请、域名验证和证书安装
此外还支持各种验证方法,包括HTTP验证、DNS验证和TLS-SNI验证,以满足不同环境和需求的证书获取和更新
使用可以轻松地配置和管理SSL/TLS证书,从而网站、应用程序或其他服务启用安全的HTTPS连接
1. 使用指南1.1. 安装
Acme.sh 安装非常方便,使用官方提供的脚本即可:
Bashcontent_copycurl https://get.acme.sh | sh
执行安装后,Acme.sh 会安装到目录 $HOME/.acme.sh
中,切换到该目录,执行注册用户:
cd $HOME/.acme.sh acme.sh --register-account -m your_email@email.com
注册成功后,查看一下定时任务,Acme.sh 默认配置每天自动检查证书(有效期大于30天)并自动续签
Bashcontent_copysudo cat /var/spool/cron/crontabs/$USER
因为 Let's Encrypt 的协议会更新,所以要设置允许 Acme.sh 自动升级
Bashcontent_copyacme.sh --upgrade --auto-upgrade
1.2. 部署
设置环境变量 Namesilo_Key
用于访问 Namesilo 的API:
# 其他域名服务商参数名称参考:https://github.com/acmesh-official/acme.sh/wiki/dnsapi export Namesilo_Key="域名服务商API-KEY"
检查输出中没有错误后,认证通配符域名(Wildcard Certificate):
Bashcontent_copy# 同样的,dns参数值参考:https://github.com/acmesh-official/acme.sh/wiki/dnsapi acme.sh --issue --dns dns_namesilo -d chancel.me -d "*.chancel.me"
必须填 *.chancel.me 和 chancel.me ,因为 *.chancel.me 不包含 chancel.me 的域名
确认没有错误输出,查看证书列表
Bashcontent_copy$ acme.sh --list Main_Domain KeyLength SAN_Domains CA Created Renew chancel.me "ec-256" *.chancel.me ZeroSSL.com 2024-06-26T01:43:28Z 2024-08-24T01:43:28Z
证书位置位于 $HOME/.acme.sh/chancel.me_ecc/
,如下:
.
├── ...
├── chancel.me_ecc
│ ├── ca.cer
│ ├── chancel.me.cer
│ ├── chancel.me.conf
│ ├── chancel.me.csr
│ ├── chancel.me.csr.conf
│ ├── chancel.me.key
│ └── fullchain.cer
└── ...
2. Docker-Compose
Acme.sh 也支持容器部署,编辑一个 docker-compose.yaml 文件:
YAMLcontent_copyversion: '3' services: acme.sh: image: neilpang/acme.sh volumes: - ./acmesh:/acme.sh environment: - Namesilo_Key=[域名服务商API-KEY] command: '--issue --dns dns_namesilo -d "chancel.me" -d "*.chancel.me" --server letsencrypt --renew --log --debug 2'
这里使用的是neilpang/acme.sh镜像,然后添加一些处理:
将当前路径下的 ./acmesh 目录作为镜像存放数据的卷,这样每次运行都可以自动续签证书 command 命令中添加了日志与详细的debug输出运行该容器
Bashcontent_copysudo docker-compose up
检查输出没有错误后,检阅一下垆坶,证书位置位于 ./acmesh/chancel.me_ecc/
,如下:
$ tree . ├── ... │ ├── chancel.me_ecc │ │ ├── ca.cer │ │ ├── chancel.me.cer │ │ ├── chancel.me.conf │ │ ├── chancel.me.csr │ │ ├── chancel.me.csr.conf │ │ ├── chancel.me.key │ │ └── fullchain.cer │ └── ... └── docker-compose.yml
可以通过 openssl 工具检查证书信息:
Bashcontent_copyopenssl x509 -in fullchain.cer -text -noout
检查输出中 X509v3 Subject Alternative Name
这一行是否包含了指定的2个域名参数,如下:
Certificate:
Data:
...
X509v3 extensions:
...
X509v3 Subject Alternative Name:
DNS:*.chancel.me, DNS:chancel.me
...
...
可以看到,DNS中包含了泛域名 *.chancel.me 也包括了单域名 chancel.me
手动将docker-compose添加到crontab任务中,就可以在证书到期前30天自动更新
文章来源:
Author:chancel
link:http://www.chancel.me/markdown/using-acme.sh-auto-renew-https-certificates