Apache + WordPress 部署 SSL 加密

传输层安全协议英语:Transport Layer Security,缩写为 TLS),及其前身安全套接层Secure Sockets Layer,SSL)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。在网景公司(Netscape)推出首版Web浏览器的同时提出SSL,IETF{.mw-redirect}将SSL进行标准化,1999年公布了 TLS标准文件。

SSL包含记录层(Record Layer)和传输层,记录层协议确定了传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。

最近,和谐物分享网站 琉璃神社 弄 TLS/SSL 加密,据说 SSL 加密能有效防范关键字重置,心血来潮我也去搞一个。

配置 SSL 加密需要用到 SSL 证书,证书基本是收费的,而且很贵,便宜的像 Godaddy 的都比 .com 域名要贵。

好在有一家叫 StartCom 的公司提供免费的 SSL 证书,而且证书受主流浏览器信任。

Ⅰ SSL 证书的申请

# 免费的SSL证书提供商StartSSL详细图文注册教程 | 小蒋博客

申请挺简单,先填上个人资料注册,收邮件下一步,安装登录用的证书(记得备份),然后证书申请,填域名然后用验证。

接着填上私钥密码,得到一串私钥,保存为 ssl.key 。

说点插曲,我在 SSH 终端使用 vi 编辑器复制私钥进去保存,因为没有回车换行导致头行前几位字符被吞掉,然后我以为是其它原因配置出错折腾了几小时才发现是私钥错了,坑死爹了!

private-keys

得到私钥后需要解密,在终端 cd 到 ssl.key 的目录下,执行:

openssl rsa -in ssl.key -out ssl.key

再输入密码就得到了解密的私钥。

然后在 StartSSL 网站控制面板的 Tool Box 进入 Retrieve Certificate ,拿到申请的证书信息和公钥,保存为 ssh.crt 。

Retrieve Certificate

再在 Tool Box 的 StartCom CA Certificates 下载到 ca.pem 和 sub.class1.server.ca.pem 。

StartCom CA Certificates

这样证书的所有文件就搞定了,如果在文件还在本地就上传到服务器上,ssl.key、ssl.crt、ca.pem 和 sub.class1.server.ca.pem 这四个。

Ⅱ Apache 配置 SSL

Apache + WordPress + SSL 完全指南

用 vi 编辑器修改 Apache 的配置文件,执行:

vi  /etc/apache2/sites-available/default-ssl.conf

添加修改下面的内容,证书文件路径改为自己的,我也是照别人放的。

SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ssl.crt
SSLCertificateKeyFile /etc/pki/tls/private/ssl.key
SSLCertificateChainFile /etc/pki/tls/sub.class1.server.ca.pem
SSLCACertificateFile /etc/pki/tls/ca.pem

修改保存好 Apache 的配置文件后,执行:

a2ensite
default-ssl.conf

确保 mod_ssl 已经开启:

a2enmod ssl

最后重启 Apache :

service apache2 restart

以上只是搞定 SSL 证书的配置,还有 WordPress 方面要折腾。

Ⅲ WordPress 配置 SSL

首先得把 WordPress 的设置里面的 Http:// 域名改为 Https:// 的,还要把数据库的文章、图片等链接全都改为 Https:// 的,用 SQL 语句或者 Velvet Blues Update URLs 插件都可以。

wordpress-http-https

接着设置 Https 跳转,编辑网站目录下的 .htaccess 文件,就是设置 伪静态 那个文件,加入下面的字段(自行修改为自己的域名)。

RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteCond %{HTTP_USER_AGENT} !(baiduspider|soso|bing|sogou|yahoo|sohu-search|yodao|robozilla|msnbot|msie|feedburner) [NC]
RewriteRule (.*) https://umi.im%{REQUEST_URI} [R=301,NC,L]

修改完成后再 重启 Apache :

service apache2 restart

#  Ⅳ 意外的情况

折腾了这么久应该搞定了啊,可惜的是还没有,又遇到各种突发情况。

1. Bilibili 外链视频无法加载,在 Http 链接下正常,只需要把 Html 外链代码的 http://share.acg.tv/flash.swf 替换成 https://static-s.bilibili.com/miniloader.swf ,SQL 语句或者插件批量替换,任君选择。

参考:Https协议下插入BiliBili视频的方法

2. 多说插件出错,安装别人做的修改版多说插件( duoshuo-wordpress),后台管理不能显示还未解决。

参考:支持SSL的多说插件已挂到github | 夜绫千裕

3. 需要配置七牛 CDN 加速,进入七牛的管理面板,修改镜像源为 Https 链接的,并设置七牛 Https 域名,再同上修改七牛的 WordPress 加速插件。

参考:试用支持HTTPS SSL的七牛云存储CDN

4. 360 前端公共库不支持 SSL 只能关闭 ,Google 公共库被墙,只好用中科大提供的公共库。

插件下载:Useso take over Google

Ⅴ 气死强迫症

折腾好所有后,地址栏那个绿色的小锁终于出现了。

bakahouse-ssl

但是很坑爹,我把出现在首页的两篇带 Flash 视频的文章移除掉才出现绿色的小锁子,不然就是一把灰锁加一个黄色三角形。

在文章页面,因为多说插件不支持 SSL ,所以还是不绿!WTF!

https-yellow

使用 Hugo 构建
主题 StackJimmy 设计