将自己的站点升级成HTTPS的(疯狂踩坑)过程
前言
又是一个阴雨天没有课的下午@( ̄- ̄)@
和舍友打完两把英雄联盟,又打开了掘金开始刷面经。(实习面试很慌啊!)
看到HTTP 协议和 HTTPS 的区别:
- HTTPS 就是身披 SSL( Secure Socket Layer )外壳的 HTTP,运行于 SSL 上,SSL 运行于 TCP 之上,是添加了加密和认证机制的 HTTP。就是在 HTTP(应用层)和 TCP(传输层)之间添加了一层 SSL 协议。
- HTTPS 默认运行在 443 端口,而 HTTP 默认运行在 80 端口。
- HTTPS 由于需要证书的加密机制,所以安全性更高,但同时 CPU 和内存的消耗也更多。
- HTTPS 使用共享密钥加密和公开密钥加密并用的混合加密机制
- 百度和谷歌也会优先收录 HTTPS 站点哦~
看到这里我不禁想起来,我每次打开自己的站点时候都会看到地址栏旁边有个不安全的标志,看着可是着实让人难受,不如来搞个 HTTPS 吧!
准备 SSL 证书
我购买的是阿里云的服务器,通过谷歌了解到阿里云是提供免费的 SSL 证书的,在如下的界面购买即可
配置 Apache 支持 HTTPS
前面一顿操作,将获得的证书文件下载到了自己的电脑上
下面开始重头戏,也是踩了不少坑的地方
也放一下阿里云官方的配置文档
然而我们自己安装的 Apache 目录和官方的是不一样,许多配置文件都分散到了各个文件中。
开启 Ubuntu 的 OpenSSL 使 Apache 加载 SSL 模块
使用命令sudo a2enmod ssl
加载 Apache 的 SSL 模块。Apache 加载 SSL 模块后,会在/etc/apache2/sites-available 下生成 default-ssl.conf 文件,我们在终端使用 sudo 权限,通过 vi 编辑器打开。
这个文件需要做以下修改:
- 第一个 VirtualHost 标签 改成 *:443
- ServerName 换成自己的域名
- SSLCertificateFile、SSLCertificateKeyFile、SSLCertificateChainFile 对应的分别是刚刚下载下来的三个文件。
完成后:wq 退出
然后需要把 default-ssl.conf 映射至/etc/apache2/sites-enabled 文件夹
使用命令sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf
进行建立软链接操作。
官方文档中
1 | SSLProtocol all -SSLv2 -SSLv3 |
在/etc/apache2/mods-available/ssl.conf
中修改
最后重新加载 Apache 配置文件:sudo /etc/init.d/apache2 force-reload
重启 Apache 服务:sudo /etc/init.d/apache2 restart
HTTP 重定向至 HTTPS
使用命令:sudo a2enmod rewrite
加载 Apache 的 rewrite 模块
打开 /etc/apache2/apache2.conf
修改如下代码
1 | <Directory /var/www/> |
然后进入你的网站根目录,使用命令 touch.htaccess 来创建.htaccess 文件
修改如下:
1 | RewriteEngine on |
然后重启服务器,测试我的博客网站咯~
嘻嘻,大功告成!