关于 SSL (HTTPS) 的重要性

为什么要给网站上 SSL 加密已经是老生常谈了,对于大型网站,SSL 证书是他们真实身份的代表,而对于我们这种小站,SSL 更多起到的是加密流量,防止运营商劫持的作用。而且标题栏有个绿色的小锁你不觉得逼格很高么!

获取 Let's Encrypt 免费 SSL 证书

选择你要安装 Let's Encrypt 的地方,执行

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt

然后关掉你的 Web 服务器(会占用80端口的软件,因为 Let‘s Encrypt 会用80端口来检测你域名的真实性)

我服务器用的是 nginx ,所以执行

$ service nginx stop

然后使用向导来获取一个证书

$ ./letsencrypt-auto certonly --standalone

这个过程需要 root 账户来执行,如果不是的话,记得加上sudo

按照向导填入必要的信息,然后会一大串的信息,找准其中的证书路径即可,一般是 /etc/letsencrypt/live/example.com/

记住example.com代表你的域名

配置 nginx 和 ghost

打开你的 Ghost 所在的配置文件
加入以下代码

listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

重启 nginx

编辑你 Ghost 的 config.js

修改网站地址为 https 协议,重启 Ghost。

然后用 https://example.com 来访问你的网站!

看,小锁是不是出来了!

配置 http 重定向 https

从原来的配置文件里面删除 listen 80; 这一行
新建一个虚拟服务器来专门处理来自80端口的请求

server {
        listen 80;
        server_name example.com;
        return 301 https://$host$request_uri;
}

重启 nginx

这样再有来自80端口的请求,就会返回301状态然后转跳到443端口

增强 SSL 安全等级

这时候如果你使用 Chrome 浏览器来进行访问,点击地址栏的小锁,你会看到该网站使用了过时的加密套件,没看到还好,看到了就会觉得不爽。

只需要在 nginx 的配置里面申明使用新型加密套件即可,添加以下配置

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:HIGH:!MD5:!aNULL:!EDH:!CAMELLIA;

重启 nginx,Chrome就会识别新型加密套件了

显示“是否只允许访问加密的网页内容”

这个一般只有 IE 家族会提示

原因也很简单,网页上有非 https 的资源

这时候只能排查

  • 你的主题是否使用了 http 的资源
  • 你的文章是否有 http 的图片
  • 你插入的统计代码是否是 http 协议的

利用好浏览器 F12 的开发人员工具,好好排查吧

完成

看着用 https 访问而且地址栏有小锁的自己博客是不是很爽!