使用Let'sEncrypt免费证书配置HTTPS

此文为将在 nginx 服务器上申请 ssl 证书以开启 https 服务的经验。

0.转载说明

作者:知微见珠
链接:https://www.jianshu.com/p/df3c07aa9330
来源:简书

有删减。

1.安装CertBot

为了实现网站的 HTTPS 化,需要在服务器上配置 CA 证书,Let'sEncrypt 是一个免费的 CA 证书,而且提供了 Certbot 客户端方便进行安装。

1
2
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

这里遇到过一个问题:之前设置了pip的镜像地址为阿里云,导致部分 python lib下载不下来。
解决方法:

1
2
vi .pip/pip.conf
注释掉index-url=http://mirrors.aliyun.com/pypi/simple/这一行

2.安装Nginx插件

以下

1
2
3
sudo ./path/to/certbot-auto --nginx
# 也支持apache
# sudo ./path/to/certbot-auto --apache

这里也遇到一个问题:Nginx路径未加入到到环境变量,导致 certbot 找不到 nginx
解决方法:

1
2
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
ln -s /usr/local/nginx/conf/ /etc/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
2
import sys
sys.setdefaultencoding('utf-8')

以上。