先说一下什么是 HTTPS ,简单的说, HTTPS 就是加了密的 HTTP 。 HTTP 是以明文方式传送数据,不支持任何方式的数据加密,如果攻击者截取了用户和服务器之间的传输文本,就可以直接读懂里面信息,甚至还可以篡改其中内容。所以 HTTP 协议并不适合传输一些敏感信息,比如信用卡号、密码等。而 HTTPS 对传输的信息进行了加密,使得信息更加安全。
当然 HTTPS 并不仅仅用来加密网站内容,他同时可以认证网站的真实性,相信不少网友们都有不小心访问到钓鱼网站的经历,有了 HTTPS 后,浏览器就可以知道你所访问的网站是真实的还是他人伪造的,在网站打开前告诉你网站是否是安全的。
而对于博主朋友们,选择 HTTPS 有个更重要的原因, google 和 baidu 都已经说明自己会优先展示支持 HTTPS 的网站,相信不论是谁,都希望自己的博客能排在搜索引擎的最前面吧。
说了一堆废话,下面进入正题。
创建 SSL 证书
想要使用 HTTPS ,用户需要一个数字证书,来让假冒服务器无法冒充自己。关于数字证书,用户可以自己建立,也可以从网上购买,自己建立的证书适合在测试开发或个人项目使用。对于公共的网站,还是推荐去购买一个正规 SSL 服务商提供的证书( https://www.hostucan.cn/ssl )。
这里简单介绍一下在 Linux 下用 OpenSSL 创建证书的过程:
#用 128 位 rsa 算法生成密钥,得到 server.key 文件
openssl genrsa 1024 > server.key
#用上一步生成的密钥创建证书请求文件 server.csr ,这一步会提出很多问题要用户一一输入
openssl req -new -key server.key > server.csr
#用密钥和证书请求文件生成证书 server.crt ,-days 参数指明证书有效期,单位为天
openssl req -x509 -days 365 -key server.key -in server.csr > server.crt
一个创建好的证书的证书包含两部分: server.crt 和 server.key ,下面我们需要将他们添加到 Apache 设置中。
配制 Apache 服务器
想要在 Apache 中使用 HTTPS ,首先要开启 SSL 模块( mod_ssl ),用户可以通过 apt-get 或 yum 安装。
安装好 ssl 模块后,修改 Apache 的设置,让原有支持 HTTP 的站点同时支持 https ,一个典型的 Apache 典型的 HTTP 配置是这样的:
<VirtualHost *:80>
DocumentRoot /var/www/html/codlr
ServerName www.codlr.com
</virtualhost>
在它下面添加下面内容:
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/certs/server.crt
SSLCertificateKeyFile /etc/certs/server.key
DocumentRoot /var/www/html/codlr
ServerName www.codlr.com
<Directory /var/www/html/codlr>
AllowOverride All
</Directory>
</virtualhost>
设置好后别忘了重启服务器。
WordPress 后台开启 HTTPS
如果想要后台控制面板支持 HTTPS ,可以修改 WP-config.php ,在文件末尾加入以下两行代码: define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);
修改 URL 跳转
首先不要忘记修改网站的地址,登录到 Wordpress 的后台:/wp-admin/options-general.php ,把 Wordpress 和 Site Address 换成 https 协议的。
考虑到有些被转载到别的网站上的博文还是 HTTP 的,所以要修改代码,让原有的 HTTP 链接自动跳转为 HTTPS 。可以通过修改.htaccess 文件来达到这个目的,.htaccess 文件在网站的根目录下,在文件的 RewriteBase 下面添加下面两行代码:
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
更新数据库
仅修改配置还是不够的,有些博客的文章中可能已经包含了 http 的链接,虽然已经修改了 Url 跳转,不过还是会被浏览器认为是不完全安全的网站,可以 SQL 进行字符串替换。
UPDATE wp_posts SET post_content = replace(post_content, 'http://codlr.com','https://codlr.com');
有的时候更换博客地址也会用到的哦。