拥抱 HTTPS 和 HTTP/2

为了方便国内的 Emacs 党交流,前段时间跟社区里面几个小伙伴一起弄了一个discourse论坛,也就是现在的emacs-china.org 。当时有位 xuchunyang 同学建议论坛应该要支持 HTTPS,其实之前我使用 Spacemacs 的时候,就有人在 Reddit 里面建议从 Melpa 安装 Package 的时候应该要用 HTTPS,否则你的 Emacs 可能被人“下毒”。但是由于国内墙的原因,我当时把 HTTPS 禁用了。

现在,xuchunyang 同学搭建了一个国内的 ELPA 镜像,我也在上周末抽空让它支持了 HTTPS,欢迎 Emacser 试用。

我为什么要使用 HTTPS

因为 HTTP 请求是没有加密的,而我在上网的过程中,我的隐私可能会被窃取。另外,我访问的网站没有完整性验证,我可能会访问一些钓鱼网站,或者我访问的网站会被劫持,然后给我推送一些广告,一般运营商和 XX 智能路由器特别喜欢干这种事情。。。

HTTPS 是互联网下一个阶段的重要进化,所有的网站都应该上 HTTPS

关于为什么要使用 HTTPS 的更多理由,推荐阅读:https://https.cio.gov/everything/

你为什么不用 HTTPS

我总结了一下,可能有以下 3 个原因:

  1. 担心 HTTPS 的维护成本过高,HTTPS 证书需要花钱买
  2. 担心 HTTPS 会让你的网站访问速度变慢
  3. 破罐破摔,我一个静态博客,也没啥值钱的东西,用不用 HTTPS 都无所谓

其实这种观点是错误的,因为现在采用开源技术让你的网站支持 HTTPS 是很简单的,而且完全免费,维护成本也非常之低。

另外,开启 HTTPS 后,就可以进一步开启 HTTP/2 的支持了,虽然 HTTPS 会比 HTPP/1.1 多一次验证的过程,但是 HTTP/2 可以弥补这些损耗,让你的网站访问速度更快。另外,谷歌和火狐浏览器都声称只采用 TLS 的方式支持 HTTP/2。

关于 HTTP/2的更多信息,推荐阅读:https://http2.github.io/faq/

如何为自己的网站添加 HTTPS

由于我的个人博客是静态网站,Web 服务器使用的是 nginx,所以我这里提供的方法对于nginx 的用户可能比较适用。但是,我相信其它 web 服务器应该是也很容易配置的。

首先,为了支持 HTTP/2,你的 nginx 的版本需要升级到 1.9.5+ 版本,我默认升级到了最新版。

其次,你需要有一个 HTTPS 的证书,我这里使用的是开源免费的 letencrypt,关于 ubuntu 怎么配置使用 letencrypt,可以参考本文Reference列举的文章,这里就不细讲了。

最后,你需要配置你的 nginx,注意把 HTTP 的请求都通过 301 重定向给 HTTPS

遇到的一些问题和解决方案

  1. 由于我的网站之前采用七牛CDN来托管博客上面的图片,但是由于七牛CDN使用的是 HTTP 协议,这样会导致我的网站不是“full site https”,在浏览器的地址栏会看到一个警告,显示我使用的是 Mixed content。虽然七牛 CDN 也支持 HTTPS,但是需要域名备案,另外 letencrypt的 HTTPS 证书它貌似并不支持,所以作罢。我后来全部改成用我自己的服务器来托管图片了,反正不限流量,我这个个人博客访问量不高,还是能够接受的。
  2. 之前的评论系统我使用的是“多说”,但是由于多说对于 HTTPS 支持不是很好,而且经常抽风,我现在果断换了 disqus 了。 (更新2016-10-15:多说又支持 https,所以我又换回来了,disqus 访问速度实在是太慢了。。。)
  3. 因为很多静态博客的主题都是使用的 Google 字体,由于国内访问速度会受到影响,我换成了 360 的 Google 字体镜像,http://libs.useso.com/ 但是,这个镜像不支持 Https,所以我又使用了科大博客提供的镜像: https://servers.ustclug.org/2014/06/blog-googlefonts-speedup/

结语

网站添加 HTTPS 以后,可以用专业的网站安全性评测工具评测一下,就像刚安装完系统要给系统打分一下。

打分网站: https://www.ssllabs.com/ssltest/index.html

2016-06-08-embrace-https-and-http2_rate-https-site.png

让我们一起拥抱 HTTPS 和 HTTP/2吧!