ssl一直用的是阿里的免费证书,但是每年需要定时更换证书,之前免费证书有效期是1年,现在改成了3个月
常用命令
certbot renew -q // 续签(-q, –quiet 程序运行只输出错误信息)
certbot certificates // 查看证书
openssl x509 -in [公钥xx.pem] -noout -dates // 检测过期时间
openssl s_client -connect xxx.com:443 // 检查域名端口配置情况
centOS安装certbot
yum update yum
install certbot
生成证书:certbot certonly
网站链接证书(需指定网站目录,不占用80端口):
certbot certonly --webroot -w /home/wwwroot/xxx -d xxx.com
请求链接证书(无需指定网站目录,占用80端口,如nginx,需要先关闭):
certbot certonly --standalone -d xxx.com
注意:
使用生成证书的命令是有接口限制的,因此不建议频繁调用,如果报错了先排查出问题再继续,可以在末尾加上--dry-run用于获取测试证书排查问题,没有报错后再去掉它获取正式证书
certbot certonly --webroot -w /home/wwwroot/xxx -d xxx.com --dry-run
证书地址:
/etc/letsencrypt/live/xxx.com/fullchain.pem;
/etc/letsencrypt/live/xxx.com/privkey.pem;
配置nginx
server {
# 某个版本前的老版本可以用ssl on,我的是 nginx/1.16.1,用listen
listen 443 ssl;
...
ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;
}
证书续期
certbot默认注册的证书,有效期是90天, 需要定期更新证书
手动续期:certbot renew
在到期前30天之内才能续期,否则certbot会判断没有必要进行续期
自动续期(脚本)
创建脚本文件:
touch auto_update_ssl.sh
vim auto_update_ssl.sh
脚本文件内容:
#!/bin/bash
# 关闭
nginx nginx -s quit
# 证书更新完毕后,将关闭的nginx启动
certbot renew --force-renewal --renew-hook "service nginx restart" > /root/shell/log/auto_update_ssl.log 2>&1 &
注意:
由于证书会自动检测是否过期,若未过期,会导致--renew-hook命令执行失败,导致nginx未能成功启动,故加上--force-renewal
centOS设置计划任务:crontab -e
这里我设置每两月执行一次续期
0 0 1 */2 * /root/shell/auto_update_ssl.sh
问题
certbot的安装的过程可能会出现的一些问题
# urllib3问题********
python ImportError: cannot import name UnrewindableBodyError
=>
pip uninstall urllib3
sudo pip install --upgrade urllib3
# pyOpenSSL问题********
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
=>
yum install http://cbs.centos.org/kojifiles/packages/pyOpenSSL/16.2.0/3.el7/noarch/python2-pyOpenSSL-16.2.0-3.el7.noarch.rpm
# 缺少文件********
http://xxx.com/.well-known/acme-challenge/OMxmbVthqV6XEcG5lG8jCvxa5k2A7ELowLFWZzOaatA:404
=>
创建名为[OMxmbVthqV6XEcG5lG8jCvxa5k2A7ELowLFWZzOaatA]的文件复制到相应路径即可