免费SSL证书: Let’s Encrypt 证书申请 + HTTPS加密教程【LAMP/Apache配置】

坦白说,我是不愿意给博客启用HTTPS(SSL)访问的。至少,现在不愿意。

为什么这样讲?

博客于2016年11月份正式上线,到今天(2018-01-22)已差不多满15个月了。

在这15个月里,本博客仅仅更新了一篇文章,记录了我当初是如何一步一步在VPS上安装WordPress建站的

承蒙诸位看得起,时常有留言交流。针对其他博主建站时出现的问题,凡力所能及的我都尽力回答,并筛选后贴在文章内作为补充和更新。

自认为文章还算靠谱,慢慢地从Google和Baidu上来了流量。按 Google Analytics 一月内的统计,流量平均约100IP/天。

是的。每天仅仅只有100个左右的访客。

太少了。不是吗?

也许等博客有了10篇、50篇、100篇甚至更多文章,流量到了1000IP/天、5000IP/天、10000IP/天甚至更多的时候,自己才可以名正言顺地自称为“博主”。

对我来说,当务之急是如何拓展更多的内容、获取更多的流量,其他诸多锦上添花甚至可有可无的事情(比如启用HTTPS)都是微不足道的。

Google不会因为你安装个SSL证书(甚至免费的)、启用个HTTPS就让你的网站出类拔萃,尽管HTTPS也是几百种(博主猜测)影响SEO排名因素的一种。

Content Is King by Bill Gates

Content Is King ..

所以,不以生产优质内容为目的的SEO都是耍流氓。

更何况,就本站这么个小博客,有什么高价值的数据需要加密访问呢?银行吗?网店吗?

因此,个人博客启用HTTPS访问的确有用,但至少现阶段不是必需品。

但是,我最终还是给博客启用了HTTPS。

原因主要有以下三点:

我喜欢折腾

对于新兴的事物特别感兴趣,喜欢尝试和体验,并一直乐此不疲。这也是这篇文章产生的主要原因。

HTTPS是趋势

Google明确表示HTTPS对网站排名有帮助,且SSL证书的安装越来越方便。既然以后也要开启,为何不趁着现在流量少时折腾好呢,同时还可以观察并验证开启HTTPS对博客有哪些具体的影响。

他人的建议

多位网友留言交流关于SSL证书安装的问题,并建议博主折腾一下出个教程。

实际上,我非常庆幸自己这几天的折腾,的确收获颇丰。其中最重要的一点就是直观的验证了SSL/HTTPS对关键词排名的提升效果(见下图)。

(每次折腾前,我习惯先做好VPS快照备份,然后截图,留作和折腾后对比。我觉得这是个不错的习惯,也建议你这样做。)

2018-01-16上午09:12时,某关键词排在第三位(启用HTTPS访问前):

wordpress建站-Google排名-上午9点

2018-01-16中午12:16时,该关键词排在第二位(启用HTTPS访问后):

wordpress建站-Google排名-中午12点

从图中可以看出,启用SSL之后,仅仅三个小时内Google关键词排名就发生了变化:

从第三升至第二位!

诚然,这也可能属于关键词排名的正常波动,但在我看来,至少印证了一点:

Google倾向于给予HTTPS网址更多的权重。

事实上,Google在很早之前的一份官方博文中也提到过这一点:

For these reasons, over the past few months we’ve been running tests taking into account whether sites use secure, encrypted connections as a signal in our search ranking algorithms. We’ve seen positive results, so we’re starting to use HTTPS as a ranking signal.

For now it’s only a very lightweight signal — affecting fewer than 1% of global queries, and carrying less weight than other signals such as high-quality content — while we give webmasters time to switch to HTTPS. But over time, we may decide to strengthen it, because we’d like to encourage all website owners to switch from HTTP to HTTPS to keep everyone safe on the web.<span class="su-quote-cite"><a href="https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html" target="_blank">Google Webmasters</a></span>

所以,如果你打算长期的、正规的建站/写博客的话,我的建议是:请尽量安装SSL证书,以开启HTTPS访问。

接下来,博主就分享一下我是如何在LAMP环境中(LNMP1.3/1.4一键安装)一步步安装Let’s Encrypt免费SSL证书的。

再次提醒:建议在进行以下操作前做好快照备份(SnapShot),以防不测。同时,由于安装Let’s Encrypt免费SSL证书需要验证域名,故务必确保域名解析成功。

#1 LNMP1.3如何升级到LNMP1.4

温馨提示如你使用的是LNMP最新版本,这步请直接跳过。
默认折叠,请单击展开 / 折叠 ..

前文讲过,本站基于LAMP环境搭建,相关的升级和安装也都是在Apache上进行的。

所以,如果你不是采用LAMP/Apache而是LNMP/Nginx的话,以下操作可能不适合。

首先,升级LNMP1.3的管理脚本:

# cd ~ && wget -c http://soft.vpser.net/lnmp/lnmp1.4.tar.gz && tar -zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./upgrade1.x-1.4.sh

为方便统一管理,重命名 LNMP1.4

# cd ~ && mv lnmp1.4 lnmp1.4-full

为节省空间,可以删除多于的文件:

# rm -rf lnmp1.4.tar.gz lnmp1.3-full

至此,升级就完成了。

但是,若你像博主一样有强迫症,非要升级一下相关软件比如PHP的话,可以这样做:

# cd /root/lnmp1.4-full
# ./upgrade.sh

选择5后,再输入5.6.31(版本可自选):

1: Upgrade Nginx
2: Upgrade MySQL
3: Upgrade MariaDB
4: Upgrade PHP for LNMP
5: Upgrade PHP for LNMPA or LAMP
6: Upgrade MySQL to MariaDB
7: Upgrade phpMyAdmin
exit: Exit current script
###################################################
Enter your choice (1, 2, 3, 4, 5, 6, 7 or exit): 5
Current PHP Version:5.4.45
You can get version number from http://www.php.net/
Please enter a PHP Version you want: 5.6.31

等待升级完成(大约10分钟)。

当出现 “======== upgrade php completed ======” 字样时,即表示PHP升级完成。

由于升级了PHP,之前安装的PHP缓存加速扩展一般会随之消失,所以需要重新安装。

如同LNMP1.3版本一样,在这里依然推荐 OPcacheMemcached 两款。

首先安装 OPchace

# cd /root/lnmp1.4-full
# ./addons.sh install opcache

当出现 “Opcache installed successfully, enjoy it!” 字样时,即表示安装成功。

接下来,继续安装 Memcached

# ./addons.sh install memcached

选择 2 – php-memcached:

Which memcached php extension do you choose:
Install php-memcache,(Discuz x) please enter: 1
Install php-memcached, please enter: 2
Enter 1 or 2 (Default 1): 2

等待安装完成(大约5分钟)。

当出现 “Memcached installed successfully, enjoy it!” 字样时,即表示安装成功。

更新了PHP版本,需要做一些修改工作,包括开启 scandir 函数和 php.ini 配置优化。

方法和安装LNMP1.3时相同:

# vi /usr/local/php/etc/php.ini

回车,然后摁住 Shift + ? 左下角出现 ? 后,输入 scandir 回车查找。

然后单击 i 键进入 insert 模式,按退格键删除 scandir 函数(多余的一个逗号也一并删除)。

然后,单击 Esc 键退出 insert 模式。

接下来,同样的方法找到并修改以下两项:

max_execution_time = 300
memory_limit = 256M

前者表示允许脚本最大执行时间300秒,后者表示允许单个脚本允许使用的最大内存256M(通常1G内存以下设置128M或256M即可)。

单击 Esc 键退出 insert 模式,输入以下命令保存退出。注意英文状态下输入!

# :wq

回车。最后重启一下LNMP:

# lnmp restart

至此,PHP也成功升级了。

#2 安装免费的SSL证书(Let’s Encrypt)

免费SSL证书 - Let’s Encrypt

Let’s Encrypt 是由 ISRG(Internet Security Research Group,互联网安全研究小组)提供的免费数字证书认证机构,旨在提供免费的SSL/TLS证书。

其参与者目前主要包括电子前哨基金会、Mozilla基金会、Akamai、思科以及Linux基金会等,这些大牌组织的加入保证了这个项目的可信度和可持续性。

所以,如果我们需要免费的SSL证书,Let’s Encrypt则无疑是最佳之选。

温馨提示如你使用的是LNMP最新版本和CentOS7系统,这步请直接跳过。
默认折叠,请单击展开 / 折叠 ..

在下文中,博主将分享本站是如何安装 Let’s Encrypt 提供的免费SSL证书的。

不过,不得不先吐槽下,在搬瓦工CentOS6.9系统上安装SSL证书过程中,居然始料未及地遇到了几个大坑(平坑过程详见下文)。

然而,博主在Vultr的CentOS6.8上测试时却一切顺利,并未发现此类奇葩问题。

所以,如果你也是使用搬瓦工CentOS6.9系统的话,这几个大坑需要多留意下。

查看 CentOS 版本:

# cat /etc/redhat-release

CentOS release 6.9 (Final)

安装SSL需要用的 crontab 定时功能,为避免出错,这里先检查下是否安装:

# crontab -l

如提示 -bash: crontab: command not found,说明我们需要安装一下 crontab

# yum -y install vixie-cron crontabs

LNMP1.4集成了一键申请、安装和自动更新 Let’s Encrypt 的免费SSL证书,相较于LNMP1.3来说,私以为这个算是最大的亮点。

安装SSL比较简单,和绑定域名类似:

# lnmp ssl add

在此提醒,务必要确保输入的域名和网站路径不要出现任何错误,一个字符都不行。否则,后续会出各种问题。

当然了,域名请自行换成你自己的。

Please enter domain(example: www.lnmp.org): seoimo.com
Your domain: seoimo.com
Enter more domain name(example: lnmp.org *.lnmp.org): www.seoimo.com
domain list: www.seoimo.com
Please enter the directory for domain seoimo.com: /home/wwwroot/seoimo.com
Allow access log? (y/n) n
Disable access log.
Please enter Administrator Email Address: email@seoimo.com
Server Administrator Email:email@seoimo.com
1: Use your own SSL Certificate and Key
2: Use Let’s Encrypt to create SSL Certificate and Key
Enter 1 or 2: 2

请注意:从这里开始,让博主头疼了好几天的大坑一个接着一个的都来了。

坑 #1 – 没找到 virtualenv 命令:

Creating virtual environment…
/bin/certbot: line 864: virtualenv: command not found
Let’s Encrypt SSL Certificate create failed!

于是安装 virtualenv

# pip install virtualenv

坑 #2 – 提示没有安装 pip

-bash: pip: command not found

接着安装 pip

# yum install python-setuptools && easy_install pip

坑 #3 – 找不到 pip 安装包的下载链接:

Searching for pip
Reading http://pypi.python.org/simple/pip/
Couldn’t find index page for ‘pip’ (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://pypi.python.org/simple/
No local packages or download links found for pip
error: Could not find suitable distribution for Requirement.parse(‘pip’)

上面的两个链接明明可以打开,为什么会提示错误呢?

想得头疼,最后在这篇文章中找到了答案:网址跳转到了 HTTPS

试着更改链接指向(安全第一,先备份):

# cp /usr/lib/python2.6/site-packages/setuptools/command/easy_install.py /usr/lib/python2.6/site-packages/setuptools/command/easy_install.py.old

# sed --in-place 's#http://pypi.python.org#https://pypi.python.org#g' /usr/lib/python2.6/site-packages/setuptools/command/easy_install.py

接下来,继续安装 pip

# easy_install pip

终于成功了:

Processing dependencies for pip
Finished processing dependencies for pip

于是,接着安装 virtualenv

# pip install virtualenv

有如下字样时,表示 virtualenv 安装成功:

Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0

特别提醒:

出现如下提示时,表示Python 2.6已经奥特了,被官方抛弃了,建议抽空升级到Python 2.7甚至更高版本(或者干脆使用CentOS7系统)。否则,安装SSL证书时可能会出错。

DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python.
A future version of pip will drop support for Python 2.6

接着,继续从头安装SSL:

# lnmp ssl add

再次提醒,务必确保输入的域名和网站路径不要出错。

Please enter domain(example: www.lnmp.org): seoimo.com
Your domain: seoimo.com
Enter more domain name(example: lnmp.org *.lnmp.org): www.seoimo.com
domain list: www.seoimo.com
Please enter the directory for domain seoimo.com: /home/wwwroot/seoimo.com
Allow access log? (y/n) n
Disable access log.
Please enter Administrator Email Address: email@seoimo.com
Server Administrator Email:email@seoimo.com
1: Use your own SSL Certificate and Key
2: Use Let’s Encrypt to create SSL Certificate and Key
Enter 1 or 2: 2

等待执行完成,出现如下字样,表示安装成功:

no crontab for root
Add Let’s encrypt crontab renew rule…
no crontab for root
Let’s Encrypt SSL Certificate create successfully.
Test Apache configure file…
test apache configure… Syntax OK
done
Restart Apache…
Restart apache… done

至此,SSL可算是安装成功。

搬瓦工给我留的这些坑,当我静下心来又重新平了一遍之后,发现总共花了不到十分钟。而就是这短短的十分钟,当时却让我苦恼了两三天,博客也宕机了不知多少次。真心觉得,对像我这样的业余选手来说,这么折腾,简直是受虐。

但是,会改吗?.. Maybe ..<span class="su-quote-cite"><a href="http://www.seoimo.com/" target="_blank">SEOIMO</a></span>

好了,SSL是安装成功了。但是,要想正确启用HTTPS访问,还需要继续以下设置。

#3 防火墙开启443端口

温馨提示如果你是按照本站的WordPress建站教程搭建的博客,这步请直接跳过。
默认折叠,请单击展开 / 折叠 ..

因为HTTPS访问要走443端口,所以,需要在防火墙里将其开启:

# vi /etc/sysconfig/iptables

复制 22 或 80 端口规则样式添加 443 端口规则:

-A INPUT -p tcp -m tcp –dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp –dport 443 -j ACCEPT

:wq 保存后退出,重启防火墙:

# service iptables restart

这时,使用 https 网址访问博客,正常情况下,网址前面会出现小锁的标记,并且 https 已变为绿色。

博客SSL证书安装成功

#4 HTTPS替换掉HTTP链接

细心的你可能发现了:网址前面的小锁为啥不是期待中的绿色呢?

这是因为,页面上存在该域名下的非 https 链接。也就是说,文章内有些图片、CSS和JS等文件仍然是以 http 链接样式存在的。

因此,我们要将其全部改成 https 样式。

进入 phpMyAdmin 管理后台,选择目标数据库,在 SQL 里跑一下如下语句(别忘了把 seoimo.com 换成你自己的域名):

UPDATE wp_options SET option_value = replace( option_value, 'http://www.seoimo.com', 'https://www.seoimo.com' );
UPDATE wp_posts SET post_content = replace( post_content, 'http://www.seoimo.com/wp-content', 'https://www.seoimo.com/wp-content' );

数据库替换http为https

温馨提示phpMyAdmin 管理后台地址:ip/phpmyadmin 或者 ip/new-name (该步骤中有说明

如果安装了静态缓存(如 WP-Super-Cache )和 Memcached 插件(比如 MemcacheD Is Your Friend ),建议再清空下缓存。

清空 Memcached 缓存

连接 Memcached

# telnet 127.0.0.1 11211

清空所有缓存数据:

flush_all

显示 OK 之后,输入 quit 退出即可。

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
flush_all
OK
quit
Connection closed by foreign host.

注意:如提示 -bash:telnet:command not found ,需要安装下 telnet 命令:

# yum -y install telnet

最后,建议再重启下 Memcached 扩展:

# /etc/init.d/memcached restart

接下来,刷新网页,期待中的小绿锁终于出现了。

博客HTTPS访问

至此,HTTPS才算是真正启用了。

但是,革命仍尚未成功,接下来还有几点重要设置,建议一并修改。

#5 添加 SSLCertificateChainFile 并开启 HSTS

走完了上面的步骤,当我们使用某些网站(如SSLLabs - SSLTest)检测博客 https 网址健康情况时,你可能会发现存在 “Chain issues”,而整体得分往往只有B。

HTTPS检测得分B

什么意思?

简单点说,就是你的证书有问题,某些浏览器下会提示错误/证书有风险,网站不安全。

所以,LAMP/Apache环境下,还需要添加中间证书/完善证书链,并开启强制HTTPS访问。(LNMP最新版本已修正证书链)

编辑网站的 Apache 配置文件,仍以本站(seoimo.com)为例:

# vi /usr/local/apache/conf/vhost/seoimo.com.conf

VirtualHost *:443 内添加 SSLCertificateChainFile 指向以及 HSTS (HTTP Strict Transport Security)命令:

SSLEngine on
SSLCertificateFile /usr/local/apache/conf/ssl/seoimo.com/seoimo.com.cer
SSLCertificateKeyFile /usr/local/apache/conf/ssl/seoimo.com/seoimo.com.key
SSLCertificateChainFile /usr/local/apache/conf/ssl/seoimo.com/ca.cer
Protocols h2 h2c http/1.1
Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"

保存之后,重启Apache:

# lnmp httpd restart

这时,再去检测HTTPS健康状况,一般就可以得到A或者A+了。

HTTPS检测得分A+

温馨提示:

① 禁用 TLS 1.0 和 TLS 1.1

倘若提示 “This server supports TLS 1.0 and TLS 1.1. Grade will be capped to B from January 2020.”,则可选禁用 TLS 1.0 和 TLS 1.1 即可:

# vi /usr/local/apache/conf/extra/httpd-ssl.conf

找到 SSLProtocol all -SSLv2 -SSLv3 该行,行末添加 -TLSv1 -TLSv1.1,即 SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 ,然后,重启一下lnnp:

# lnmp restart

② 配置 HSTS (HTTP Strict Transport Security)(可选)

上文提到的配置 HSTS 部分,考虑到虚拟主机可能没有修改 .conf 的权限,可选择将 Header always set .. 该行添加到网站根目录下的 .htaccess 文件内:

# Enable HSTS (Strict-Transport-Security)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

#6 关闭 SNI(Server Name Indication)(可选)

Server Name Indication(服务器名称指示)是用来改善 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)的一项特性,它允许客户端在服务器端向其发送证书之前请求服务器的域名。

在以前,只有独立 IP 的虚拟主机或 VPS 才能开启 SSL/TLS 连接服务。也就是说,一个 IP 只能对应一个 HTTPS 访问。因此,同一个 IP 下搭建多个 HTTPS 网站是不行的。

但现在可以了。

使用 LNMP 最新版安装包编译的 Apache 2.2 已自带 SNI 拓展,默认是打开的。同 IP 下搭建多个网站时,只要按操作绑定域名并启用 HTTPS 就可以,不需要额外设置。

然而,在启用之后,你可能遇到下面这种情况:没有权限,访问禁止!

网站HTTPS访问限制

这是因为,某些奇葩的浏览器不支持 SNI 技术,比如上图所示的 IE 8 以及在 WinXP 系统下所有的 IE 浏览器。

尽管 XP 系统已经退出历史舞台了,但在国内还是有一定的市场。

倘若你选择无视之,下面这步可以略过了;但如果你不打算失去这部分访客,还是得照顾一下他们。

方法比较简单:关闭 SSLStrictSNIVHostCheck

# vi /usr/local/apache/conf/extra/httpd-ssl.conf

将默认的 SSLStrictSNIVHostCheck on 改成 off ,如下所示:

SSLStrictSNIVHostCheck off

保存,退出。然后重启 Apache 即可:

# lnmp httpd restart

再次访问就不会出现上图中的问题了。

但是,如果你是同一个 IP 下搭建了多个网站,即便关闭了 SSLStrictSNIVHostCheck ,XP 系统下访问HTTPS可能还会出问题。比如:

网站HTTPS访问警告

出现这种情况有两个解决办法:①换用除 IE 以外的浏览器,比如谷歌Chrome和360极速浏览器;②换个系统吧兄弟,XP 真的太古老了。

#7 定时更新SSL证书

使用 LNMP 安装 Let's Encrypt - SSL 证书,会自动添加定时更新证书的指令。

查看指令:

# crontab -l

正常情况下,显示如下信息(LNMP1.6):

5 0 * * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null

或者(LNMP1.5):

30 0 * * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null

通常,保持默认即可。

但是,免费证书有效期90天,每天都检测升级一次,博主感觉有点太频繁。可以改为15天甚至一个月检测一次:

# crontab -e

更改为以下设置:

10 0 */15 * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null

保存,重启 crond

# service crond restart

然后,设置开机启动:

# chkconfig crond on

这样,每15天的凌晨,程序会自动检测证书是否需要更新;如果不需要,则直接跳过。

当然,你也可以随时强制性手动更新(注意:限制每周5次)。

强制更新Let's Encrypt证书:

# "/usr/local/acme.sh"/acme.sh --force --cron --home "/usr/local/acme.sh" > /dev/null

出现 Congratulations, all renewals succeeded. 字样时,表示证书更新完成。

#8 HTTP全部301重定向到HTTPS

编辑网站根目录下的 .htaccess 文件,在顶部添加如下代码:

# BEGIN Rewrite
RewriteEngine On
RewriteCond %{HTTP_HOST} ^seoimo.com [NC]
RewriteRule ^(.*)$ https://www.seoimo.com/$1 [R=301,L]
# END Rewrite

保存之后,上传覆盖即可。

倘若访问提示“重定向次数过多”,也可设置仅跳转端口试试:

# BEGIN Rewrite
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.seoimo.com/$1 [R=301,L]
# END Rewrite

#9 HTTPS对网站打开速度的影响

通常认为,启用HTTPS访问会额外增加网页打开时间,同时也会占用VPS资源。

但是,具体影响有多大呢?

经过博主测试(Pingdom & PageSpeed Insights),启用HTTPS访问对网页打开时间的影响几乎可以忽略不记(详见下图)。

(测试地点选择洛杉矶,尽量靠近博客主机所在机房,以减少线路问题造成的干扰。)

开启HTTPS访问前后,Google PageSpeed Insights 测试结果:

未开启HTTPS时,Googl-PageSpeed-Insights网页打开速度测试

已开启HTTPS后,Googl-PageSpeed-Insights 网页打开速度测试

开启HTTPS访问前后,Pingdom 测试结果(整体数据):

未开启HTTPS时,Pingdom测试结果(整体数据)

已开启HTTPS后,Pingdom测试结果(整体数据)

开启HTTPS访问前后,Pingdom 测试结果(请求耗时):

未开启HTTPS时,Pingdom测试结果(请求耗时)

已开启HTTPS后,Pingdom测试结果(请求耗时)

从上图可以看出,本站启用HTTPS访问后,SSL耗时只有几十毫秒。页面打开耗时虽有所增加,但增加的非常有限,甚至可以忽略不计。

当然,本次测试仅仅只是验证SSL对本站访问速度造成的影响,并不意味着你开启HTTPS访问后网站打开速度和上图一样。

网站打开速度更多是由VPS性能(比如 CPU 、带宽和 I/O读写)、线路、域名DNS解析、站内优化以及本地网速等多种原因造成的,有些因素可以通过优化调整改善,有些我们却很难左右。

博主的建议是:在做好站内优化的同时,尽可能选择性能更好的VPS/服务器/虚拟主机。比如本站目前用的 Hostwinds(月付$4.99,1GB内存,美西机房)。

UPDATE:★★★★★

建议安装LNMP1.5版本吧,至少不会出现如下Python依赖的问题!

在一个手痒痒的下午,折腾了一番VPS之后,博主决定把 Let's Encrypt 证书更新一下,尽管离到期还有一个多月时间。

于是,手动更新之:

# /bin/certbot renew --renew-by-default --disable-hook-validation --renew-hook "/etc/init.d/httpd restart"

结果,却出现如下错误:

Bootstrapping dependencies for RedHat-based OSes that will use Python3... (you can skip this with --no-bootstrap)
yum is /usr/bin/yum
To use Certbot, packages from the EPEL repository need to be installed.
Enabling the EPEL repository in 1 second....
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
* base: centos.s.uw.edu
* elrepo-kernel: repos.lax-noc.com
* extras: mirror.hmc.edu
* updates: mirror.chpc.utah.edu
Package epel-release-6-8.noarch already installed and latest version
Nothing to do
No supported Python package available to install. Aborting bootstrap!

看样子是需要升级到 Python3

但是,我在VULTR的CentOS7系统下(Python2.7)是可以正常更新的,所以,或许没必要一定升级到 Python3Python2.7 也是可以的。

那就试试看吧!(稳妥点,建议先做好 SnapShot 备份。)

更新系统并安装相关依赖:

# yum -y update
# yum -y install epel-release
# yum -y install openssl openssl-devel zlib-devel gcc sqlite-devel

完成后,开始安装 Python2.7 :(博主选择是 Python2.7.12 版本)

# cd ~
# wget https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tgz
# tar -zxf Python-2.7.12.tgz && cd Python-2.7.12
# ./configure
# make && make install

之后备份当前的 Python2.6 ,并设置 Python2.7 软链接:

# mv -f /usr/bin/python /usr/bin/python2.6
# ln -s /usr/local/bin/python2.7 /usr/bin/python

安装 pip ,并设置 Python2.7 为默认启动版本:

# wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py
# ln -s /usr/local/bin/pip2.7 /usr/bin/pip

如提示 ln: creating symbolic link `/usr/bin/pip': File exists ,则需要删除原 pip ,或者做成备份:

# mv -f /usr/bin/pip /usr/bin/pip.old

之后,查看 Python 版本信息:

# python --version

显示 Python 2.7.12 ,表示安装成功。

接下来,还需要做如下修改,以确保 yum 功能正常使用:

# vi /usr/bin/yum

将第一行的 #!/usr/bin/python 修改成 #!/usr/bin/python2.6 即可。

之后,可以删除之前下载的 Python-2.7.12 压缩包,以节省空间:

# cd ~ && rm -rf Python-2.7.12.tgz

至此,在搬瓦工CentOS6.9系统上安装 Python2.7.12 算是成功了。

接下来,继续手动更新证书:

# /bin/certbot renew --renew-by-default --disable-hook-validation --renew-hook "/etc/init.d/httpd restart"

悲催,又显示错误:

Creating virtual environment...
Traceback (most recent call last):
File "/usr/bin/virtualenv", line 7, in *module*
from virtualenv import main
ImportError: No module named virtualenv

继续安装 virtualenv

# pip install virtualenv

再次更新证书:

# /bin/certbot renew --renew-by-default --disable-hook-validation --renew-hook "/etc/init.d/httpd restart"

终于成功了:

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/seoimo.com/fullchain.pem (success)

《免费SSL证书: Let’s Encrypt 证书申请 + HTTPS加密教程【LAMP/Apache配置】》有265条评论

265 条评论

    • 从描述反馈来看。运行Python时出现了语法错误。
      博主对Python并不精通,也没遇到过这种情况,所以暂时无法找到原因。
      问问谷歌吧!
      或者,可以先备份下系统,然后参考文末的说明,升级到Python2.7再试试。

      回复
      • 感谢升级后就好了,另外问一下.htaccess是在/home/wwwroot/xxx.com/里吗,没有的话可以创建一个吧

        回复
        • 是的,一般安装完wp后,网站根目录下就会自动生成了。
          如果没有的话,也可以手动创建。

          回复
  1. 你好我按照您的教程安装lnmp后也安装了ssl但是网站出现https是红色的还带一杠,这是为什么

    回复
  2. 博主您好,想请教您一个问题。
    我的域名上线后根据您的教程成功添加了SSL证书,后来我利用同个域名搭建了一个二级站点(比如,game.domain.com),因为当时添加ssl证书的时候只添加了www.domain.com,因此访问game时会提醒https不安全,想要为这个二级域名配置和原域名相同的证书,请问该如何操作呢?
    如果无法添加,那么能否可以删除原有的ssl证书,重新配置为*.domain.com的证书呢,如果是这样,又该如何删除证书呢?

    回复
    • 使用免费的 Let's Encrypt 证书吗?是的话暂时无解,等到泛域名解析出来就好了。按计划本应该已经出来了,但是推迟了。
      如果多金,买其他能提供泛解析的证书吧(个人博客的话就算了)。
      要么,针对这个二级域名单独再申请个免费证书吧。

      回复
  3. 博主好!我的站点今天无法打开了,昨天还好好的,怀疑跟SSL证书有关,SSL证书是let's encrypt的,检查了下5.9才到期,访问站点显示ERR_CONNECTION_ABORTED,FQ后用Chrome浏览显示不安全,只能访问http,http站点可以浏览,我的站点是用插件把http跳转到https的,能帮我看下是啥问题吗?多谢!

    回复
      • 添加 SSLCertificateChainFile重启后显示“SSLCertificateChainFile: file '/etc/letsencrypt/live/seoimo.com/chain.pem' does not exist or is empty

        重新安装SSL证书能解决?

        回复
        • 你添加我的域名当然不存在呀!你应该添加你自己的域名。
          查看你设置的SSL域名:

          # ls /etc/letsencrypt/live/

          /etc/letsencrypt/live/seoimo.com/chain.pem 中本站域名替换成你的。
          重新安装SSL貌似也不行,因为lnmp1.4版本默认的Apache下没有完善证书链,得手动加上去。不知道是不是作者忘记了。

          回复
          • Sorry!粘贴命令时忘改了 现在证书链解决了,但我这边https还是打不开,ERR_TIMED_OUT

            回复
            • 检查了下,你的证书没有问题,且从我边打开你的网站也完全没有问题。
              问题可能出在你客户端,Chrome的话试试卸载浏览器后重新安装。
              又或者换个浏览器试试。

              回复
              • 我这边用电脑和手机的不同浏览器都试过了,都打不开,应该不是客户端的问题吧,怀疑是区域网络问题,找了别的区的朋友试了下也打不开。
                但我尝试可学上网可以正常打开网站,难不成被何斜了?如果真是这样的话,短期内有啥解决方案吗?使用CDN?

                回复
                • 应该没有河蟹,ping了一下,全国基本正常。
                  不同省份多找几个朋友测试下,至少北方联通目前是正常打开的。
                  CDN并非全能,如果河蟹了,要么等,要么换。

                  回复
                  • 感谢博主的耐心解答!如果不是何斜,会不会跟http跳转https有关?
                    不明白为啥我这边只有使用可学上王才能浏览

                    回复
                    • 这个就搞不懂了,至少我这边能正常访问。
                      如果其他人也能正常访问,我觉得多半问题还是出在你那里,可能是某个插件或者浏览器你做了哪些设置等等。

                  • 博主好!我的网站现在打不开了 用站长工具ping 服务器出现异常 可以SSL登录 貌似只有连VPN才能浏览网站 请问这是大陆的网络屏蔽还是服务器端除了问题?

                    回复
                    • Ping了下你的网站,只是个别地方超时而已。
                      我这边可以正常访问,带不带https都可以。
                      大概率还是你那边可能存在问题。

  4. 博主,您好,能不能帮忙看一下我的https站点,访问时提示不安全,用chrome检查证书,提示“此证书是由未知颁发机构签名的”。我的证书是lnmp1.4安装的let's encrypt证书,用chrome查看,证书没有到期,自安装后应该是自动更新过一次,但不是在近期,应该是在2月初自动更新的,3月份我还访问过没问题的,但是今天访问突然提示不安全了。看起来不像是因为自动更新导致的,但还有一个信息是:在同一个服务器上的另一个域名是在这两天更新的,也出现同样的问题了,不知道是不是另一个域名自动更新的时候导致的问题。麻烦楼主帮忙看下,谢谢啦~

    回复
  5. 博主,按照你的方法设置了301跳转,但是再打开网站是会报错——将您重定向的次数过多。
    请问该怎么解决啊

    回复
  6. 博主,你用的是国内的域名还是国外的域名?如果是国内的,备案的流程复不复杂,时间长不长?

    回复
    • 域名在阿里云,目前(或许一直)不打算备案。并且,正计划转移到NameSilo去,因为续费便宜。

      回复
      • cn的域名真是让人无语,去年花了29在阿里买了个cn的域名,闲备案麻烦,就一直没给备案,也没解析,前几天解析到我国外的主机,网站就一个页面,几行获取经纬度的js代码,一个alert弹窗显示经纬度,然后我发给我微信小号测试一下,才2个小时不到,微信就提示“已经停止访问该网页网页包含诱导分享.....”,然后整个域名都被微信封了,不管放什么页面进去,在微信里都是提示已经停止访问该网页,即使停止解析了微信还是提示已经停止访问该网页,估计是进黑名单了,很可能是因为没备案,如果以后要做微信开发的话,那这个域名算是废了,目前已经在NameSilo换了个新的com域名,国外域名+国外主机,慢就慢点吧,至少没那么一堆破事儿

        回复
        • 没备案的域名是不能在微信里转发的,微信有过说明。
          如果不是特别需要,通常都不需要备案,域名和主机放在国外就可以。
          找个靠谱点的主机,国内访问的速度其实并不慢。

          回复
  7. 谢啦,我找到那个php啦!但是我输入之后,返回了这个啊!#1146 - Table 'sjk_xxx.wp_options' doesn't exist 大神再次求助!!!

    回复
    • 数据库中,表 sjk_xxx.wp_options 并不存在。看看是不是进错数据库了,或者是你数据库本身就没有这个表。

      回复
    • 看下 /home/wwwroot/default 目录下,是否对 phpmyadmin 进行过改名。
      没改名的话,访问地址是:IP地址/phpmyadmin
      改名了,地址变为:IP地址/新目录名

      回复
  8. 你好,为什么你的谷歌搜索结果页显示的有你博客的评分和review by seoimo,谢谢

    回复
    • 因为在测试Ratings对关键词排名和点击率有多大影响。
      如果测试后发现影响比较大,接下来会单独分享出来;如果没什么影响,不久后可能会去掉。

      回复

发表评论