通过 Certbot 安装 Let's Encrypt 证书,来实现全站的 HTTPS 访问,报错解决记录

  • 证书安装

最近终于尝试着将本站升级成了HTTPS协议,主要参考laravel学院文章
通过 Certbot 安装 Let’s Encrypt 证书,来实现全站的 HTTPS 访问
另外参考Certbot官网,选择相应的操作系统和中间件即可根据操作提示进行安装,本文中的错误记录是基于CentOS7+Nginx进行安装协议过程中遇到的,初次安装有很多错误导致安装失败,本文主要将安装过程中遇到的错误跟大家分享一下。

第一个错误在运行certbot --nginx 命令之后,出现如下错误:

ImportError: No module named 'requests.packages.urllib3'

详情如下图:

这是Python模块未找到的错误,具体原因参考上述文档,解决办法在
Certbot 的 github 上的一个 Issues 找到了答案(Issues链接):

pip uninstall requests
pip uninstall urllib3 
yum remove python-urllib3 
yum remove python-requests 
yum install python-urllib3 
yum install python-requests 
yum install certbot

之后在执行certbot --nginx 命令,又出现新的错误:

The requested nginx plugin does not appear to be installed

这个错误如果再第一步执行以下命令就不会出现:

sudo yum install python-certbot-nginx

再次执行certbot --nginx 命令,新的错误如下:

Error while running nginx -c /etc/nginx/nginx.conf -t

从报错内容看,默认的nginx配置文件默认位置是/etc/nginx/nginx.conf,而我的主机位置并非此处,所以猜想certbot --nginx是否有额外参数用来指定nginx.conf的位置,查找后发现我们可以这样解决:

certbot --nginx --nginx-server-root=/usr/local/nginx/conf (等号右边填写nginx配置文件的目录)

这次执行后开始到提示一步步安装的交互界面,输入邮箱位置等一系列问题,当运行到选择域进行升级HTTPS的时候,出现这个错误:

An unexpected error occurred:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 2: ordinal not in range(128)
Please see the logfiles in /var/log/letsencrypt for more details.

提示编码方面的问题,详细的解释大家可以参考上文中提到的laravel学院的文章,解决办法是将配置文件中的所有中文注释删除,果然再次执行后没有这个错误,并提示安装完成,提示我们进行测试:
https://www.ssllabs.com/ssltest/analyze.html?d=www.cpfe.xin
测试结果如下:通过 Certbot 安装 Let's Encrypt 证书,来实现全站的 HTTPS 访问,报错解决记录_第1张图片

总之意思就是无法访问该主机,直接访问域名发现也提示无法访问。打开配置文件发现一切也都没有错误,我使用的是阿里云的服务器,打开安全组规则,发现443端口也是开着的,尝试了很多方法还是没有结果,后来打开宝塔运维界面,想到可能是我使用的这个宝塔运维和这个操作有冲突,为了试验可靠性,我重新安装了CentOS操作系统,重新搭建了LNMP环境,然后再次执行上述中的所有操作,再次打开测试网站进行测试,这次终于大功告成,通过浏览器访问也终于显示一把安全的小锁。

  • 自动更新证书

由于Certbot提供的证书3个月就到期,为了避免每次进行手动更新,可以添加定时任务来完成这项工作:

crontab -e
	0 0,12 * * * certbot renew --quiet

你可能感兴趣的:(linux)