欢迎来到 HTTP/2 的世界

直到几个月前,本博客一直在使用 SPDY,后来 Apache 升级到了 2.4,Google 的 SPDY 库却不能用了。这个蛋疼的设定是因为 Google 把 mod_spdy 捐献给了 Apache 项目,此后自己就去专心做 HTTP/2 了。而 Apache 项目组自己却不知道在干啥,几个月都没有新代码提交,就让 mod_spdy 烂在自己的代码库里。

今年二月,在 Google 的努力推动下,HTTP/2 成为下一代 HTTP 通信标准,而它的前身,正是 SPDY 协议。SPDY 的最新版本是 3.1,目前已经较为流行,比如 KeyCDN 和 CloudFlare 都默认提供这项支持。HTTP/2 实际上是 SDPY 4.0,目前还没有广泛流行,预计到今年年底,Apache 和 nginx 才可能提供支持。

相较于 HTTP/1.1,HTTP/2 加载 SSL 的速度更快,对于多文件/资源的加载速度也有所提高,还有对流式传输的支持(本站不怎么用得到)。

由于本站使用了 Google 的网络支持,自动获得了 HTTP/2 的支持。如果你想体验一下 HTTP/2,请安装最新版本的 Chrome 或 Firefox,开启 HTTP/2 支持,然后访问本站即可。Chrome 中开启的方法是在 chrome://flags 找到 SPDY/4 的选项并启用。在访问的同时,打开 chrome://net-internals/#spdy,即可验证本站已活在 HTTP/2 的世界中。

HTTPS 证书简介

HTTPS,全称是“超文本传输安全协议”,是一种加密的网络通信技术。其中的“安全”,由 TLS(或者 SSL)协议提供。作为用户,我们不必了解 HTTPS、TLS 和 SSL 之间的关系,当我们在谈论网页浏览的时候,这三个术语通常指的是同一个东西。

使用了 HTTPS 加密的网站(比如本站),用户在访问网站的时候,所有的通讯都是被加密的,只有用户的浏览器和网站服务器知道真实的内容,通讯过程中所有的中间节点(路由器、网关等)都无法进行破解,从而保证了浏览过程的安全性。在访问 HTTPS 的网站时,浏览器通常会显示一个绿色或者加锁的图标,表示安全,看一下你的浏览器地址栏,是不是这个样子的?

HTTPS 的工作原理,简单来说就是网站服务器提供了一个证书 A,这个证书可由一个第三方机构的证书 B 来验证其真伪,而这个证书 B 会默认存放在用户的操作系统中。当用户访问网站时,浏览器会获得证书 A 的信息,然后拿本机中已有的证书 B 来验证,如果验证成功,则开始使用证书 A 进行加密通讯。于是,对网站主的要求就是,在一个权威机构获取一个合适的证书。

HTTPS 的证书有分为几类:普通、多域名、通配(Wildcard)、扩展验证以及多域名扩展验证,以下就来一一介绍:

普通证书:只对单一域名有效,在申请的时候需要指定域名,比如本站的证书,就是指定了 leonax.net 作为认证域名,当这个证书用于其它域名如 abc.leonax.net 的时候,浏览器就是给出警告:域名和证书不匹配。

多域名证书:在申请的时候可以指定多个域名,并且域名只对这一系列域名有效。

通配证书:俗称“野卡”。可使用通配符来指定域名,比如 *.leonax.net,这样所有的子域名都可以使用这个证书,适用于子域名多,又不想一个一个单独申请证书的网站。

扩展验证证书:和上述个人证书不同,扩展验证证书只颁发给企业用户,其“扩展验证”的含义就是验证了企业的合法性。有了企业的名声做后盾,这网站的安全性就更上一层楼了。此外,为了突出公司的重要性,浏览器一般会体现出扩展验证证书的公司信息,比如下图是访问 DigiCert 时看到的样子:

多域名扩展验证证书:普通的扩展验证证书只支持单一域名,多域名证书可以提供多个域名的扩展验证。需要注意的是,和上述的个人证书不同,扩展验证证书没有通配证书这一选项。

一个 SSL 证书的有效期通常为一年,最长可以申请到三年,过期之后要去第三方机构续签证书。这个过程是为了避免证书被盗之后的风险,也就是即合证书被盗了,别人也只能使用最多一年时间,从而减少了损失。一些大公司为了安全,只使用有效期为半年的证书。

如果你对 HTTPS 已动心,本站推荐 DigiCert 作为 SSL 证书提供商。

在 Amazon Linux 上启用 SPDY

首先,你需要一个 SSL 证书,这个证书通常需要一个权威机构颁发,也就是需要付点小钱,自己生成的不会被浏览器认可。我是在 GoDaddy 搞的。

在申请证书之前,你需要生成一个请求(Certificate Signing Request),在 Linux 上可以使用 openssl:

然后把 .csr 文件的内容告诉 GoDaddy,GoDaddy 就会给你一个证书了,你会下载到2个文件,假设一个是 leonax.crt,一个是 leonax_bundle.crt。

接下去,要把证书安装在 Apache 里,这时候,你需要 mod_ssl,可以通过以下命令安装:

装完之后,会生成一个配置文件:/etc/httpd/conf.d/ssl.conf,里面有一些默认的设置,比如打开 443端口。需要改是的,把证书文件换成刚才 GoDaddy 提供的文件,然后再映射一下路径。比如:

然后通过 https://leonax.net/ 就可以访问 SSL 加密的内容了。

接下来,就是安装 SPDY 了,你需要先安装 at:

然后下载 mod_spdy:(这个是 32 位的 RPM 包,需要其它版本的可至官网下载

然后安装 mod_spdy:

然后就大功造成啦……使用 chrome://net-internals/#spdy 来验证一下你的 SPDY 吧。

如果需要的话,你还可以把所有的 :80 请求都转到 :443:(使用.htaccess)