Ghost Blog启用HTTPS使用LetsEncrypt SSL证书

终于把全站都启用了https,看到了小绿锁真开心~其中磨砺了多少的血汗!!!虽然有很多高手已经分享过这个方法,但是由于发布时间较老,很多地方让人摸不到头脑。整个过程下来,依然花了我不少时间,所以在此分享我折腾的整个过程。整个过程可以分为两部分,一个是LetsEncrypt的证书生成,一个是ghost blog 在nginx上的配置:(本人使用的vps为debian,所以一小部分命令可能有些不同。)

另外,startssl的配置难度大于LetsEncrypt,环节十分多且麻烦,所以建议使用LetsEncrypt的证书。

一、LetsEncrypt篇

首先确认自己的vps是否安装了python2.7以上版本,git。如果没有自行安装。

git clone https://github.com/letsencrypt/letsencrypt`  
cd letsencrypt  
sudo service nginx stop  
./letsencrypt-auto --agree-dev-preview --server  https://acme-v01.api.letsencrypt.org/directory auth
sudo service nginx start  

在第四步时,按照提示输入email和域名即可。至于为什么需要停止nginx,是因为接下来的环节需要占用80等端口。之后证书会生成到/etc/letsencrypt/live/yuan.ga/privkey.pem;下,其中的yuan.ga改为自己的域名。

二、Ghost篇

修改nginx配置,sudo vim /etc/nginx/sites-available/ghost.conf,全部清空并粘贴进去下列配置。注意需要更改所有的“tryingtobeawesome.com”为自己的域名,还需要正确的配置自己的密钥位置。

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

server {  
    listen 443 ssl;
    server_name  tryingtobeawesome.com;

    ssl_certificate     /etc/letsencrypt/live/tryingtobeawesome.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tryingtobeawesome.com/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:2368;
        proxy_redirect off;
    }
}

接着到ghost 博客目录,把其中的config.js中的url也改成https,也就是只加个s,另外在下面填一行forceAdminSSL: true;,别忘了前面的缩进。官方教程中是这样修改的,但是我添加这一行总是出现503错误。

三、自动renewal篇

由于LetsEncrypt 只有60天的期限,所以需要续期,如果嫌手动续期麻烦,可以使用脚本加上crontab定时完成。renewal有3~7天的频率限制,所以一个月定时启动一次即可。注意:reneweal也需要关掉占用80端口的程序!

./letsencrypt-auto certonly --renew-by-default --email yearliny@outlook.com -d yuan.ga -d www.yuan.ga

如果是使用的apache2作为代理服务,可以使用“sh /home/yearliny/letsencrypt/letsencrypt-auto certonly –apache –renew-by-default -d yuan.ga -d www.yuan.ga”命令。如果需要自动更新,先使用“crontab -e”,选择编辑器后,在最底部加入“0 0 1 * * sh /home/yearliny/letsencrypt/letsencrypt-auto certonly –apache –renew-by-default -d yuan.ga -d www.yuan.ga”保存退出即可,

另外,由于是由git控制的,所以更新程序只需要在目录下使用git pull命令即可。

现在已经过了一段时间,原来的更新方法失效,如果更新失败,请先更新系统和letsencrype,然后使用./letsencrype-auto renew 命令即可。如果你遇到其他问题或有更好的方法,也希望能在下列评论中分享出来。

四、番外篇:设置HSTS

hsts的作用就是在浏览器就直接把网站链接转为https,以防止中间301跳转请求被中间人拦截。具体设置方法也很简单,直接vim nginx配置文件,添加一行在server块中即可。

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";  

可以通过curl -I https://yuan.ga -k查看hsts是否生效,出现了Strict-Transport-Security这样的字眼说明设置成功了。另外别忘了重启nginx~

Reference:

发表评论

电子邮件地址不会被公开。 必填项已用*标注