使用Let'sEncrypt免费证书配置HTTPS
此文为将在 nginx 服务器上申请 ssl 证书以开启 https 服务的经验。
0.转载说明
作者:知微见珠
链接:https://www.jianshu.com/p/df3c07aa9330
来源:简书
有删减。
1.安装CertBot
为了实现网站的 HTTPS 化,需要在服务器上配置 CA 证书,Let'sEncrypt 是一个免费的 CA 证书,而且提供了 Certbot 客户端方便进行安装。
1 | wget https://dl.eff.org/certbot-auto |
这里遇到过一个问题:之前设置了pip的镜像地址为阿里云,导致部分 python lib下载不下来。
解决方法:
1 | vi .pip/pip.conf |
2.安装Nginx插件
以下
1 | sudo ./path/to/certbot-auto --nginx |
这里也遇到一个问题:Nginx路径未加入到到环境变量,导致 certbot 找不到 nginx;
解决方法:
1 | ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx |
3.检测HTTPS是否可用
此时应该已经就可以通过 https 访问你的域名了,可以到 https://www.ssllabs.com/ssltest/analyze.html?d=你的域名 检测一下;
注:如果发现访问不了,请检查服务器或者
ECS的安全组是否开启了443端口。
4.设置自动更新
由于 Let'sEncrypt 的证书只有90天的有效期,所以需要在失效前进行刷新,运行如下命令:
1 | ./path/to/certbot-auto renew |
建议设置 crontab 实现定时自动刷新,如下配置了每月1号0点进行自动刷新
1 | 0 0 1 * * /usr/local/bin/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" |
为避免 certbot-auto 工具在更新证书时,因为自动进行的 update 进程导致证书更新失败,可以使用以下命令阻止自动更新:
1 | certbot-auto renew --no-self-upgrade |
以上。
5.其他问题
遇到过另一个问题是,在使用 Certbot 申请证书时,提示:
1 | UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 1: ordinal not in range(128) |
因为默认情况下,Python采用的是 ascii 编码方式,不识别中文。此时需要确定的问题是:
nginx.conf 配置文件中,不能含有任何中文字符。
如果有,通常是在注释中,将其删除即可。
另外可以在 /usr/lib/python2.7/site-packages/ 目录下添加一个 sitecustomize.py 文件,加入内容:
1 | import sys |
以上。