使用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 |
以上。