已开启全站 HTTPS

前言

每次用 Chrome 访问 Blog 时都会出现这种东西,感觉很没有安全感。


显然,开启 HTTPS 访问的站点不会出现这种情况,而且有一把绿色的小锁(看上去很安全的样子),比如洛谷。
于是我也决定要让我的 Blog 开启 HTTPS。

准备

首先你需要有一个域名(这不废话吗),其次你需要一个 SSL 证书,可以在域名控制台找到这个选项。


然后点开它,当然没钱的我只能申请一个免费证书。

慢慢等它审核(一般没有敏感字的话几分钟就好)

看到这个后,点下载就可以,现在你就拥有了一个 SSL 证书。

配置

本 Blog 使用的是 Nginx,根据它的官方教程,先在 Nginx 安装目录下创建 cert 目录,并把下载得到的压缩包内容全部放到这个文件夹里。
完成以后修改 Nginx 的配置文件。
sudo vi /usr/local/nginx/conf/nginx.conf

SSL 模块错误解决

然而按照提示修改以后,出现了这样的提示
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:100
通过在网上查找资料得知,这是因为我没有安装 SSL 模块所导致。
那么应该如何解决这个问题呢?需要重新从安装文件搞起。
定位到安装包文件夹,执行以下命令
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
然而又出现了错误 ./configure: error: SSL modules require the OpenSSL library.
所以还需要安装 libssl-dev,安装后就可以愉快地 make 了。
先备份一波 Nginx sudo cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
覆盖原有安装文件 cp ./objs/nginx /usr/local/nginx/sbin/
重新启动 Nginx sudo /usr/local/nginx/sbin/nginx -s reload

通过 HTTPS 访问站点

403 Forbidden?

可以考虑把 HTTP 的配置文件 server 部分一股脑儿地添加到 HTTPS server 部分,只是把 80 端口改成 443 端口。

提示不安全?

然而...


一切都是因为我通过 IP 地址访问了 Blog。
把 WordPress 站点地址和 WordPress 地址改成 https://域名/ 就可以了。
提示这个?

这只是因为你引用了一些不安全的图片啊、样式啊什么所导致的,把它们的链接修改一下就好。
当然还有一个好用的插件。SSL 不安全内容修复器,它的名字也很直白,能够帮助你修复一些不安全的引用。

依然通过 HTTP 访问?

你需要一个插件。Really Simple SSL,它可以强制开启全站 HTTPS。

最后


大功告成!Yeah!


Update at 2018-07-11

HTTP/2

据说 HTTP/2 能够极大地提高网页访问速度,于是又给 Nginx 添加了 HTTP/2 模块。
编译参数 --with-http_v2_module,记得也要加上原来的参数。
还是原来的操作,直接覆盖 Nginx 二进制文件。
修改配置文件,在监听端口中的 443 ssl 后面加上 http2,保存然后重新启动 Nginx 服务就好了。
现在加载网页能够在 Chrome 浏览器中看到 HTTP/2 信息了。(在 Chrome 自带的工具内 chrome://net-internals/