终于把全站都启用了https,花费了好一番功夫!虽然有很多高手已经分享过方法,但是由于发布时间较老,很多地方的改动让人摸不到头脑。整个过程下来,依然花了我不少时间,所以在此分享我折腾的整个过程。整个过程可以分为两部分,一个是LetsEncrypt的证书生成,一个是Ghost blog 在Nginx上的配置:(本人使用的VPS为Debian,所以一小部分命令可能有些不同。)
另外,Startssl的配置难度大于Let’s Encrypt,环节十分多且麻烦,所以建议使用Let’s Encrypt的证书。
一、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/example.com/privkey.pem;
下,其中的example.com
改为自己的域名。
二、Ghost篇
修改nginx配置,sudo vim /etc/nginx/sites-available/ghost.conf
,全部清空并粘贴进去下列配置。注意需要更改所有的“example.com”为自己的域名,还需要正确的配置自己的密钥位置。
server { listen 80; server_name example.com; return 301 https://example.com$request_uri; } server { listen 443 ssl; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.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,另外在下面填一行官方教程中是这样修改的,但是我添加这一行总是出现503错误。forceAdminSSL: true;
,别忘了前面的缩进。
三、自动更新证书
由于Let’s Encrypt 只有60天的期限,所以需要续期,如果嫌手动续期麻烦,可以使用脚本加上crontab定时完成。renewal有3~7天的频率限制,所以一个月定时启动一次即可。注意:reneweal也需要关掉占用80端口的程序!
./letsencrypt-auto certonly --renew-by-default --email [email protected] -d example.com -d www.example.com
如果是使用的Apache2作为WEB Server,可以使用下列命令
sh /home/yearliny/letsencrypt/letsencrypt-auto certonly --apache --renew-by-default -d example.com -d www.example.com
如果需要自动更新,先使用“crontab -e”,选择编辑器后,在最底部加入下列内容保存退出即可。
0 0 1 * * sh /letsencrypt/letsencrypt-auto certonly --apache --renew-by-default -d example.com -d www.example.com
另外,由于是由Git控制的,所以更新程序只需要在目录下使用git pull
命令即可。
现在已经过了一段时间,原来的更新方法失效,如果更新失败,请先更新系统和letsencrype,然后使用./letsencrype-auto renew 命令即可。
四、番外篇:设置HSTS
HSTS的作用就是在浏览器就直接把网站链接转为https,以防止中间301跳转请求被中间人拦截。具体设置方法也很简单,直接在Nginx配置文件中添加一行在server块中即可。
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
配置完成后,可以下列命令测试是否成功。
curl -I https://yearliny.com -k
当结果中出现下列内容就是成功了。关于其他Web server如何设置Hsts,可以查看网站启用HSTS严格HTTPS
Strict-Transport-Security
发表回复