/ Computer Science

为Ghost博客配置HTTPS

什么是HTTPS

在配置HTTPS之前,我们首先要弄清楚什么是HTTPS_(:зゝ∠)_。简单来说,就是安全版的HTTP。它是在HTTP层下加入SSL层来确保数据传输安全。
具体的实现原理是:在传输数据前,客户端和服务端要进行一次握手,握手的过程简单来说有以下几个步骤:

  • 客户端发起一个HTTPS请求,把自身支持的Cipher Suite(密钥算法套件)发送给服务端;
  • 服务端接到客户端的所有Cipher Suite之后与自己所支持的进行对比,如不支持则断开连接,否则从中选出一种加密算法和HASH算法,以证书的形式返回给客户端,证书中包含了公钥、颁证机构、网址、失效日期等;
  • 客户端收到服务端响应后,首先验证证书是否合法,若证书合法或用户接受了不授信的证书,则客户端生成一串随机数,然后用证书中的公钥进行加密;
  • 用最开始约定好的HASH方式,把握手信息取HASH值,然后用随机数进行加密握手信息+握手信息HASH值(此处附上HASH值是为了把握手信息做签名,防止消息在传播过程中被篡改),将所有生成的信息发送给服务端;
  • 服务端接收到密文之后,用自己的私钥来解密握手消息取出随机数密码,再用随机数密码解密握手消息并计算HASH值,然后与传过来的HASH值进行对比。如果二者一致,则用随机密码加密一段握手消息(握手信息+握手信息HASH值)给客户端;
  • 客户端同样利用随机数解密并计算握手消息的HASH,如果与服务端发来的HASH值一致,则握手结束,此后全部通信数据将由之前客户端生成的随机密码使用对称加密算法进行加密。

因为密钥只有客户端和服务端知道,所以即使请求被拦截也无法解密,以此可以保证通信不被监听或篡改!

如何为GHOST配置HTTPS

说了这么多原理,那么要如何为GHOST博客配置HTTPS呢?这里我们用到了Let's Encrypt的服务,这是一家免费的证书签发机构,且已经获得Mozilla、微软等主要浏览器厂商的根授信。
我的GHOST博客是搭建在Ubuntu 16.04 LTS上的,使用Nginx进行反向代理。
具体操作如下:

第一步,安装Certbot:

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx

第二步:配置Nginx:

$ sudo vim /etc/nginx/sites-avaliable/default

(这里我自己在搭建Ghost博客的时候,没有使用default配置文件,而是自己新建了配置文件,请因人而异!)
找到已存在的server_name这一行,将localhost修改为你的域名:
server_name example.com www.example.com
保存配置文件并退出,验证配置语法是否正确,并重新加载新配置:

$ sudo nginx -t
$ sudo service nginx reload

第三步,获取你的SSL证书:
首先确保上面的工作都正常完成,然后输入:

$ sudo certbot --nginx -d example.com -d www.example.com

一般来说,这是你第一次使用certbot,所以你需要在提示之后输入你的电子邮箱地址,并同意服务,这时重新打开你的网站,它应该已经是HTTPS协议的安全访问了。

第四步,更新Diffie-Hellman参数
如果现在你去SSL Labs Server Test测试你的服务,由于使用了弱的Diffie-Hellman参数,它只能得到B级的评分,可以使用如下操作来创建并使用新的Diffie-Hellman参数:

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

然后修改Nginx的配置文件,在server块里加入新配置:
$ sudo vim /etc/nginx/sites-available/default

……
ssl_dhparam /etc/ssl/certs/dhparam.pem;
……

然后确认配置无语法错误并重启:

$ sudo nginx -t
$ sudo service nginx reload

第五步,设置证书自动更新
由于Let's Encrypt的证书有效期只有90天,因此我们配置一下证书自动更新。
$ sudo crontab -e
选择你喜欢的编辑器,编辑接下来的文档,添加如下语句:

……
15 3 *** /usr/bin/certbot renew --quiet

到此,我们的HTTPS就配置完成啦!撒花(❁´◡`❁)✲゚

为Ghost博客配置HTTPS
Share this

Subscribe to Zed's Blog