为 Ghost 博客添加 HTTPS

SSL 证书类型

如今很多网站都支持 HTTPS 访问了,HTTPS 可以保证用户在访问的过程中信息不会轻易被截获。通常来说,SSL 证书分为三大类,他们的安全性是递增的,当然价格和安全系数成正比。

  • DV (Domain Validation Certificate),DV 证书适合个人网站使用,申请证书时,CA 只验证域名信息。几分钟之内就能签发。个人博客、网站,选择 DV 证书即可;
  • OV ( Organization Validation Certificate),OV 证书需要认证公司的信息。1-2天签发。企业网站,但还不想付费,可以选择 DV 证书; 综合性的企业门户网站,可以选择 OV 证书;
  • EV ( Extended Validation Certificate),EV 证书的认证最为严格,一般会要求提供纸质材料。签发时间也较久。金融、电商企业网站,选择 EV 证书。

免费的 SSL 证书 - Let's Encrypt

对于我的博客来说,只需要 DV 等级的证书就够了,使用 Let's Encrypt 就能很好的满足我的需求。Let's Encrypt 是国外一个公共的免费 SSL 项目,由 Linux 基金会托管,由 Mozilla、思科、Akamai、IdenTrust 和 EFF 等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由 HTTP 过渡到 HTTPS。Let's Encrypt 的有效期为 90 天,到期后需要续期就可以继续使用了。

如何使用?

因为我的博客使用 Docker 部署在 CentOS 7 上,而 CentOS 7 默认的环境也正好能满足 Let's Encrypt 对环境的要求。下面我就简单说下如何配置 Let's Encrypt。

安装 Let's Encrypt

首先要安装 git

yum install git

然后 clone Let's Encrypt 到本地,并执行其中的配置脚本:

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --server https://acme-v01.api.letsencrypt.org/directory --agree-dev-preview

期间会要求输入邮箱和要配置 HTTPS 的域名。完成后会生成证书文件:

/etc/letsencrypt/live/slarker.me/fullchain.pem
/etc/letsencrypt/live/slarker.me/privkey.pem

配置 Nginx

我这里需要配置的比较简单:

server {
    listen 80;
    server_name  slarker.me;
    return       301 https://slarker.me$request_uri;
}

server {
    listen 443 ssl;
    server_name  slarker.me;

    ssl_certificate /etc/letsencrypt/live/slarker.me/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/slarker.me/privkey.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    access_log   /var/log/nginx/ghost.log;
    error_log    /var/log/nginx/ghost_error.log;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass http://127.0.0.1:6000;
        proxy_redirect off;
    }
}

监听了 80 和 443 端口,301 会把请求都重定向到 HTTPS 上,然后把上面生成的证书文件路径也加进来,然后重启 Nginx 就 OK 了。

七牛静态资源也能使用 HTTPS

如果博客里面没有用到外部的一些静态图片等资源,那这时候访问网站,应该会看到地址栏有一把小绿锁了。但是我的博客一直使用的是七牛的免费图床,一直都是 HTTP 外链,所以地址栏的小绿锁也没有显示。

所以只有把图片等资源都换成 HTTPS 链接就可以了,而现在七牛也是支持 HTTPS 的。对于未经过备案的域名,可以使用七牛提供的 融合 CDN 加速域名

点击 HTTPS 域名 后,七牛会为这个存储空间生成一个支持 HTTPS 的域名,之前的 HTTP 域名依然有效,两种方式都可以正常访问资源。

然后把博客中用到的图片链接都换成相应的 HTTPS 链接就可以了。

替换完成后,现在地址栏的小绿锁终于有了!

参考资料