作者:E4b9a6, 创建:2024-03-29, 字数:3272, 已阅:973, 最后更新:2024-06-25
Acme.sh 是一个开源的自动化证书管理工具,用于获取、安装、更新和部署SSL/TLS证书,使用Shell脚本编写并支持在Linux、macOS、FreeBSD和Windows等操作系统上运行
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连接
Acme.sh 安装非常方便,使用官方提供的脚本即可:
curl 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天)并自动续签
sudo cat /var/spool/cron/crontabs/$USER
因为 Let's Encrypt 的协议会更新,所以要设置允许 Acme.sh 自动升级
acme.sh --upgrade --auto-upgrade
设置环境变量 Namesilo_Key
用于访问 Namesilo 的API:
# 其他域名服务商参数名称参考:https://github.com/acmesh-official/acme.sh/wiki/dnsapi
export Namesilo_Key="域名服务商API-KEY"
检查输出中没有错误后,认证通配符域名(Wildcard Certificate):
# 同样的,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 的域名
确认没有错误输出,查看证书列表
$ 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
└── ...
Acme.sh 也支持容器部署,编辑一个 docker-compose.yaml 文件:
version: '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镜像,然后添加一些处理:
运行该容器
sudo 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 工具检查证书信息:
openssl 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天自动更新