本文描述Linux(centOS)下如何自动申请通配符版的HTTPS、SSL证书,并自动续期
1、环境与脚本准备
安装snapd工具
# 安装EPEL存储库
sudo yum install epel-release -y
# 安装snapd包
sudo yum install snapd -y
# snapd开机启动
sudo systemctl enable --now snapd.socket
systemctl start snapd
# 配置snap软链接
sudo ln -s /var/lib/snapd/snap /snap
#更新snapd版本
sudo snap install core
使用snap安装certbot工具
# 安装certbot证书机器人
sudo snap install --classic certbot
# 配置软链接
sudo ln -s /snap/bin/certbot /usr/bin/certbot
配置自动续期脚本
$ wget https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au
$ unzip -o certbot-letencrypt-wildcardcertificates-alydns-au-master.zip
$ cd certbot-letencrypt-wildcardcertificates-alydns-au-master
$ chmod 0777 au.sh
将安装包解压到/opt目录下
$ mv certbot-letencrypt-wildcardcertificates-alydns-au-master/* /opt/certbot/
2、配置
(1)domain.ini
如果domain.ini文件没有你的根域名,请自行添加。
(2)填写au.sh文件中DNS API 密钥:
这个 API 密钥什么意思呢?由于需要通过 API 操作阿里云 DNS, 腾讯云 DNS 的记录,所以需要去域名服务商哪儿获取 API 密钥,然后配置在au.sh文件中:
- ALY_KEY 和 ALY_TOKEN:阿里云 API key 和 Secrec 官方申请文档。
- TXY_KEY 和 TXY_TOKEN:腾讯云 API 密钥官方申请文档。
- HWY_KEY 和 HWY_TOKEN: 华为云 API 密钥官方申请文档
- GODADDY_KEY 和 GODADDY_TOKEN:GoDaddy API 密钥官方申请文档。
(3)选择运行环境
目前该工具支持五种运行环境和场景,通过 hook 文件和参数来调用:
- PHP(>4以上版本均可)
- au.sh php aly add/clean:PHP操作阿里云DNS,增加/清空DNS。
- au.sh php txy add/clean:PHP操作腾讯云DNS,增加/清空DNS。
- au.sh php godaddy add/clean:PHP操作GoDaddy DNS,增加/清空DNS。
- Python(支持2.7和3.7,无需任何第三方库)
- au.sh python aly add/clean:Python操作阿里云DNS,增加/清空DNS。
- au.sh python txy add/clean:Python操作腾讯云DNS,增加/清空DNS。
- au.sh python hwy add/clean:Python操作华为云DNS,增加/清空DNS。
- au.sh python godaddy add/clean:Python操作GoDaddy DNS,增加/清空DNS。
如果没有php或者python,直接 yum install php python就好
根据自己服务器环境和域名服务商选择任意一个 hook shell(包含相应参数),具体使用见下面。
使用certbot生成通配符证书
/usr/bin/certbot certonly -d *.aiapaas.com -d aiapaas.com --manual --preferred-challenges dns --manual-auth-hook "/opt/certbot/au.sh python aly add" --manual-cleanup-hook "/opt/certbot/au.sh python aly clean"
输出结果如下
3、配置证书续期
vim /etc/crontab
3 3 */1 * * root /usr/bin/certbot renew --manual --preferred-challenges dns --manual-auth-hook "/opt/certbot/au.sh python aly add" --manual-cleanup-hook "/opt/certbot/au.sh python aly clean"
4、nginx配置示例
如果虚拟机直接启动nginx,那么将证书地址配置为上面自动更新证书输出的地址就好。
如果使用docker启动,假设以如下命令启动,配置了券映射
docker run -d --name nginx80443 -p 80:80 -p 443:443 -v /mnt/nginx/nginx.conf:/etc/nginx/nginx.conf -v /mnt/nginx/logs:/var/log/nginx -v /mnt/nginx/html:/usr/share/nginx/html -v /mnt/nginx/conf:/etc/nginx/conf.d -v /mnt/nginx/cert:/usr/share/nginx/cert -v /etc/letsencrypt/archive/aiapaas.com:/usr/share/nginx/autocert --privileged=true nginx
那么nginx配置文件如下:
server {
listen 443 ssl;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index home.html;
}
ssl_certificate /usr/share/nginx/autocert/fullchain1.pem;
ssl_certificate_key /usr/share/nginx/autocert/privkey1.pem;
...