ssl一直用的是阿里的免费证书,但是每年需要定时更换证书,而且数量上也有限制,这就很烦,我这么懒,别说一年一换,就是两年一换证书我都懒得打开后台~
科普
为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书
常用命令
certbot renew -q // 续签
certbot certificates // 查看证书
openssl x509 -in [公钥xx.pem] -noout -dates // 检测过期时间
openssl s_client -connect www.zhaizhaiplan.com:443 // 检查域名端口配置情况
安装
centOS
yum update
yum install certbot
debian/deepin/ubuntu
apt update
apt install certbot -y
生成证书
certbot certonly
第一次使用,会提示输入邮箱: [email protected]
输入域名: xxx.com
输入网站的绝对路径: /home/wwwroot/xxx
当然,我建议直接一步到位:
certbot certonly --webroot -w /home/wwwroot/xxx -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天, 需要定期更新证书
手动续期
手动续期需要注意两点:
1.80端口没有被占用,因为更新证书需要用到80端口。
2.在到期前30天之内才能续期,否则certbot会判断没有必要进行续期。
certbot renew
自动续期
脚本
touch auto_update_ssl.sh
vim auto_update_ssl.sh
#!/bin/bash
# 每月执行一次
# 关闭nginx
nginx -s quit
# 证书更新完毕后,将关闭的nginx启动
certbot renew --renew-hook "nginx" > /root/shell/log/auto_update_ssl.log 2>&1 &
计划任务
crontab -e
0 0 1 * * /root/shell/auto_update_ssl.sh
问题
使用过程并不是一帆风顺的,这里枚举下安装使用过程中的一些问题
# 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]的文件复制到相应路径即可