作者:Chancel Yang, 创建:2024-03-29, 字数:2287, 已阅:172, 最后更新:2024-03-29
Acme.sh
是一个开源的轻量级Shell脚本,用于自动化管理和部署SSL证书
由于服务器经常一年一换,借助docker来部署运行acme.sh
会更方便前期
首先编辑一个docker-compose.yaml
文件:
version: '3'
services:
acme.sh:
image: neilpang/acme.sh
volumes:
- ./acmesh:/acme.sh
environment:
- GD_Key=[your godaddy key]
- GD_Secret=[your godaddy secret]
- HTTP_PROXY=http://192.168.1.2:8080
- HTTPS_PROXY=http://192.168.1.2:8080
command: '--issue --dns dns_gd -d "*.chancel.me" -d "chancel.me" --server letsencrypt --renew --log --debug 2'
这里使用的是neilpang/acme.sh镜像,然后添加一些处理:
acmesh
目录作为镜像存放数据的卷,这样每次运行都可以自动续签证书godaddy
的api的魔法网络代理command
命令中添加了日志与详细的debug输出command
命令中看到分别申请了*.chancel.me
和chancel.me
,这是因为*.chancel.me
并不包含裸域名chancel.me
运行该容器
sudo docker-compose up
检查输出没有错误后,可以检阅一下当前目录的文件,如下:
chancel@nuc8i5 ~/docker/acme.sh$ tree
.
├── acmesh
│ ├── account.conf
│ ├── acme.sh.log
│ ├── ca
│ │ ├── acme-v02.api.letsencrypt.org
│ │ │ └── directory
│ │ │ ├── account.json
│ │ │ ├── account.key
│ │ │ └── ca.conf
│ │ └── acme.zerossl.com
│ │ └── v2
│ │ └── DV90
│ │ └── account.key
│ ├── *.chancel.me_ecc
│ │ ├── ca.cer
│ │ ├── *.chancel.me.cer
│ │ ├── *.chancel.me.conf
│ │ ├── *.chancel.me.csr
│ │ ├── *.chancel.me.csr.conf
│ │ ├── *.chancel.me.key
│ │ └── fullchain.cer
│ ├── chancel.me_ecc
│ │ ├── chancel.me.conf
│ │ ├── chancel.me.csr
│ │ ├── chancel.me.csr.conf
│ │ └── chancel.me.key
│ └── http.header
└── docker-compose.yml
9 directories, 19 files
其中,*.chancel.me_ecc
里的*.chancel.me.key
和fullchain.cer
就是证书文件
如果你需要裸域名和泛域名支持,需要在命令行中像我一样分别指定,这样生成出来的证书文件是包括了泛域名和裸域名的
可以通过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天自动更新