项目中一直使用阿里云的免费SSL证书,1年有效期(https://www.aliyun.com/product/cas)
由于近期阿里云调整了免费证书的有效期为3个月,给项目维护提供了不便
采用Certbot可以实现签发和自动续期SSL证书
一、Let’s Encrypt、Certbot和Snap的关系
Let’s Encrypt是一个免费、自动化和开放的证书颁发机构,由非营利的互联网安全研究小组(ISRG)为您提供。
Certbot使用EFF的Certbot在您的网站上自动启用HTTPS,部署Let’s Encrypt证书。
Snap则是用于下载安装Certbot的包管理器。
所以,核心是Let’s Encrypt证书,Snap和Certbot则是用于生成管理证书的工具。
二、官方Certbot安装(与nginx进行证书绑定)
官网地址:https://certbot.eff.org/
1、安装snapd
增加EPEL仓库
sudo yum -y install epel-release
安装snapd
sudo yum -y install snapd
启用snapd socket
systemctl enable --now snapd.socket
创建一个软连接 /snap 到 /var/lib/snapd/snap,安装软件需要在 /snap中
sudo ln -s /var/lib/snapd/snap /snap
2、安装certbot
确保snapd是最新版本
sudo snap install core
sudo snap refresh core
移除certbot-auto和任何Certbot OS包
sudo yum remove certbot
安装certbot
sudo snap install --classic certbot
准备Certbot命令
sudo ln -s /snap/bin/certbot /usr/bin/certbot
选择nginx运行方式
# 自动配置nginx
sudo certbot --nginx
# 手动配置nginx
sudo certbot certonly --nginx
自动续期
sudo certbot renew
3、签发&配置证书
签发证书
注意:签发证书前要先关闭Nginx服务!!!
注意:签发证书前要先关闭Nginx服务!!!
注意:签发证书前要先关闭Nginx服务!!!
# 使用dns方式(需在域名管理中配置_acme-challenge.<YOUR_DOMAIN>的TXT记录)
certbot certonly --email xxx@126.com --manual --preferred-challenges dns -d a.xxx.com
# 签发过程中会生成TXT记录值,此时不要着急下一步,需要先解析好TXT记录。
# 在你添加完记录保存之后,最好要检查一下解析记录
nslookup -type=txt _acme-challenge.example.com 8.8.8.8
# 或者
dig -t txt _acme-challenge.example.com
# 如果包含你所添加的记录值,那么说明添加成功
那现在就可以控制台继续回车,不会意外就会把签发的证书文件保存,控制台打印出来证书文件的存放位置,一般情况下是会保存在/etc/letsencrypt/live/example.com目录下
这个目录下一般会有四个文件:
cert.pem: 服务器证书
chain.pem: 包含Web浏览器为验证服务器而需要的证书或附加中间证书
fullchain.pem: cert.pem + chain.pem
privkey.pem: 证书的私钥
修改nginx配置文件
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
# 你自己配置;
}
}
配置好 Nginx 配置文件,重载使修改生效
sudo nginx -s reload
4、定时检查自动续期
crontab -e的命令来启用自动任务,命令行:
# 这个脚本表示每隔 7 天,夜里 3 点整自动执行检查续期命令一次。续期完成后,重启 nginx 服务
0 3 */7 * * /bin/certbot renew --renew-hook "/where/your/nginx -s reload"
添加完后重启cron服务即可
service crond restart
参考文档
https://blog.youkuaiyun.com/cljdsc/article/details/133461361
https://blog.youkuaiyun.com/wangyun381974024/article/details/128319707