不再为续签证书烦恼!自动续签https免费证书
前言
很多时候为了网站的安全性,不得不启用 HTTPS 对网站进行防护,网站一多,每年的证书费用也是一笔不小的开支。所以免费证书是我们很好的一个选择,国内各大公有云厂商也有提供免费证书额度,但免费的证书需要每三个月续签一次,实在麻烦。由此 acme.sh 项目孕育而生,项目地址:https://github.com/acmesh-official/acme.sh
acme.sh 续签证书流程如下:
第一次需要进行安装以及配置运行环境,后续流程写入脚本,定时执行脚本实现 HTTPS 证书自动续签更新
1. 安装 acme.sh
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com
2. 云平台创建一个拥有添加域名解析权限的子账号
在申请证书的过程中,需要对域名进行 DNS 验证以确保拥有该域名的所有权,acme.sh 支持国内几大公有云厂商自动添加域名解析记录,阿里云、腾讯云等,完整名单支持如下:https://github.com/acmesh-official/acme.sh/wiki/dnsapi ,这里以阿里云为例
-
创建子账号
RAM 访问控制 --> 身份管理 --> 用户 --> 创建用户
-
授权域名解析
RAM 访问控制 --> 身份管理 --> 用户 --> 刚刚创建的用户 --> 权限管理 --> 新增授权 ,授予
AliyunDNSFullAccess
权限 -
创建子账号的 AccessKey
RAM 访问控制 --> 身份管理 --> 用户 --> 刚刚创建的用户 ,获取
AccessKey ID
和AccessKey Secert
3. 证书申请
3.1 添加子账号 AccessKey 变量
export Ali_Key="**********"
export Ali_Secret="*********************"
3.2 申请证书
/bin/bash /root/.acme.sh/acme.sh --issue --dns dns_ali -d test.opsnote.top
我这里用的域名为 test.opsnote.top,证书申请完成
4. 旧证书备份
mkdir /data/nginx-1.24.0/cert/old -p
mv -f /data/nginx-1.24.0/cert/test.opsnote.top* /data/nginx-1.24.0/cert/old
5. 安装证书
/bin/bash /root/.acme.sh/acme.sh --install-cert -d test.opsnote.top\
--cert-file /data/nginx-1.24.0/cert/test.opsnote.top.crt\
--key-file /data/nginx-1.24.0/cert/test.opsnote.top.key\
--fullchain-file /data/nginx-1.24.0/cert/test.opsnote.top.pem
注意:Nginx 配置证书的时候使用拥有完整证书链的 test.opsnote.top.pem 证书
6. 重启应用
cd /data/nginx-1.24.0 && ./nginx -s reload
7. 验证
8. 一键更新证书脚本
mkdir /data/tools -p && vim /data/tools/cert_update.sh
#!/bin/bash
# 阿里云DNS解析密钥
export Ali_Key="**********"
export Ali_Secret="*********************"
# 更新证书的域名
Domain="test.opsnote.top"
# 证书申请
/bin/bash /root/.acme.sh/acme.sh --issue --dns dns_ali -d ${Domain}
# 旧证书备份
mkdir /data/nginx-1.24.0/cert/old -p
mv -f /data/nginx-1.24.0/cert/${Domain}* /data/nginx-1.24.0/cert/old
# 证书安装
/bin/bash /root/.acme.sh/acme.sh --install-cert -d ${Domain}\
--cert-file /data/nginx-1.24.0/cert/${Domain}.crt\
--key-file /data/nginx-1.24.0/cert/${Domain}.key\
--fullchain-file /data/nginx-1.24.0/cert/${Domain}.pem
# 重启应用
cd /data/nginx-1.24.0 && ./nginx -s reload
-
授权
chmod 755 /data/tools/cert_update.sh
-
手动执行一次试试证书是否正常更新,确保流程没问题再配置定时任务
/bin/bash /data/tools/cert_update.sh
-
脚本仅参考,并不通用,需根据具体情况调整AccessKey、域名及应用路径
9. 配置定时任务
crontab -e
0 1 1 2,4,6,8,10,12 * /bin/bash /data/tools/cert_update.sh
定时任务说明: 偶数月份的第一天凌晨一点进行证书更新
申请的证书是三个月有效期,我们的定时任务设置成两个月自动更新一次证书即可