博客使用了椭圆曲线 TLS 证书

心血来潮把博客的证书更新了,加密算法由本来的 RSA-2048 更换为 EC-256。简单来说,HTTPS 通讯初始化的时候,需要在服务器和客户端之间交换一个 TLS 证书,用来验证服务器的身份。

由于每次 HTTPS 通讯时,都需要下载这么一个证书,它的体积在一定程度上决定服务器响应的速度。传统的基于 RSA-2048 算法的证书,有 2048 位即 256 字节大小,而新的 EC-256 算法,则只需要 32 字节。更换之后,一下子就少了 200 多字节,在网络繁忙的时候,可以有效地传输。

EC 或者 Elliptic Curve,中文译为“椭圆曲线”。EC 是一种新的非对称加密算法。EC-256 所提供的安全性相当于 RSA-3072,已经高于传统的 RSA-2048,但只需要 1/8 的体积,性价比很高。

不过博客的速度已经很快了,更换证书的性能提升应该是感受不到了 :P

站点启用 Certificate Transparency

之前一直都以为 Certificate Transparency 这个东东是给 EV 用的,没想到今天看了篇文章,说是个人站点也可以用。于是就去申请了一下。

先简单说说 SSL 证书的安全性。SSL 的机制是一个简单的信任链关系,浏览器并不能区分两个受信任的 CA 对同一域名签发的证书。比如本站的证书是由 DigiCert 签发的,如果另一个 CA 有意或无意也签发了一个对于 leonax.net 的证书,浏览器在访问网站的时候并不知道哪个证书是“真的”,哪个是“假的”。于是如果有两个网站,使用了不同 CA 签发的证书,且都说自己是 leonax.net,那么浏览器都会显示出“安全”的图标。现在 SSL 证书泛滥,部分 CA 为了降低证书申请的门槛,并没有做到严格的域名审核步骤,导致一些恶意分子有机可趁,伪造证书来骗取用户的信任。

简单来说 Certificate Transparency 是一个用于增强 SSL 证书安全性的东西,它可以确保 CA (Certification Authority) 不乱发证书。CT 的做法是通过一个第三方的验证机制,来判断证书的改动有没有出现异常。比如上述情况,会有两个 CA 同时向验证服务器提交信息,或是一个提交了,浏览器却收到了另一个的证书,这样便可以区分出“真假证书”了。

本站的证书是在 DigiCert 申请的。DigiCert 对 Certificate Transparency 的介绍可以看这里。实际上它废话了一堆,只是告诉你要去联系客服开启 CT 即可。于是我就去找了客服,十分钟搞定,当中还绕来绕去说了一些废话,可能是因为美国当地时间是夜里,客服不太清醒的缘故。不过事情也不复杂,很快客服就给我重新签发了证书。拿到新的证书之后,再上传到网站服务器即可。

开启了 CT 之后,在 Chrome 的网站信息中就可以看到类似上图的字样。说是网站已提供有效的 Certificate Transparency 数据。

如何生成 CSR 文件

CSR,Certificate Signing Request,是制作 SSL 证书的必要步骤。一个 CSR 文件中描述了 SSL 证书持有人的信息(如个人姓名或公司名称)、联系地址等,用于验证 SSL 证书和域名是同一个人持有,以确保网站的合法性。

在 Linux 上生成 CSR 文件通常需要用到 OpenSSL 工具,这是一个命令行工具,参数一大堆,对于偶尔用一下的用户来说,可能不太友好。于是 DigiCert 提供了一个在线工具,用于生成 OpenSSL 的命令行,然后再拿去网站主机上运行就可以了。理论上 OpenSSL 一定要在网站所处的主机上运行,即换了主机之后要重新制作一个新的证书,但实践中并不强制这一步骤。

工具截图如下:

示例中我填写了 Google 的信息,请按实际情况修改,各项的含义如下:

  • Common Name: 你的网站域名
    • 如果你购买的是单一域名的 SSL 证名,请填写实际用到的域名,如 leonax.net 或者 www.leonax.net;在 DigiCert 购买的单一域名,填写 www 版本送裸域;
    • 如果购买的是野卡,则填写 *.leonax.net;
  • Organization: 公司名称,如果是个人用户,请填写自己的全名;
  • Department: 部门名称,可不填;
  • City: 所在城市;
  • State / Province: 所在州/省;
  • Country: 所在国家;
  • Key Size: 加密字长,目前常用的是 2048,如果对安全性要求较高,可以选择 4096;

全部填好之后,点击“Generate”即可以生成命令行,把右侧生成出来的一串命令,复制到 Linux 主机上运行即得到一个 CSR 文件。

之后要做的步骤是向 SSL 证书提供商上传这个文件,以获得最终的 SSL 证书,之后再详述。

注:OpenSSL 是一个 Linux 的工具,如果你的主机所用的是 Windows 或其它操作系统,可以在这个页面找到相应的介绍。

本站被强制 HTTPS

坛子兄的提醒,才猛然发现本站已经“被” HTTPS 了。在使用最新版本的 Chrome、Firefox 和 IE 11 访问本站时,浏览器将不允许你使用未加密的链接来访问本站。

原因?因为 Chrome 和 Firefox 分别维护了一份网站列表,当用户访问列表中的网站时,Chrome 和 Firefox 会自动使用 HTTPS 来访问。这项技术被称为 HSTS(HTTP Strict Transport Security)。我在使用 HSTS 之初就知道这个列表的存在,本来以为它们只是针对一些大的热门网站,毕竟收集互联网上所有的网站是不太可能的事情。但很荣幸的是,本站被两份列表都收录了:

Chrome(文件较大,谨慎打开)

Firefox

微软也表示,IE 11 将使用 Chrome 所提供的列表。于是,三大浏览器都将安全地访问本站。

如果想要使用 HSTS,只要在服务器的 HTTPS 输出中添加如下报头(Header)。注意一定要在 HTTPS 中才有效果,在 HTTP 中输出是无效的。

启用 HTTPS 的好处不言而喻,但这份静态的列表不禁让我担心某一天要是本站不支持 HTTPS 了,要撤销也是一件很麻烦的事情。不过现在还不用过分关注这件事,毕竟 HTTPS 是大趋势。

欢迎来到 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 的世界中。

DigiCert,金牌 SSL 证书服务商

刚开始玩博客的时候,我用了 GoDaddy 的服务,因为它家提供了各种各样的服务,域名、主机、建站等,应有尽有,对于初学者来说很方便。但是后来慢慢熟悉了之后,就开始搬离 GoDaddy 了。当然这不是说 GoDaddy 的服务不好,只是它家的服务太多,难免有一些不尽如人意的地方,不如那些专攻某一项业务的商家来得好。

现在我的域名和主机都使用了 Google Cloud、邮件使用 SendGrid 等,在 GoDaddy 只剩下了 SSL 证书。现在要把 SSL 证书也搬出 GoDaddy,这样就可以彻底和它说再见了。

于是我就去研究了一下 SSL 证书的服务商,实际上专门贩卖 SSL 证书的商家也不多,比如顶级的有 Symantec 等、入门级的有 StartSSL、Comodo 等,另外有一些自己有能力签发证书的公司,比如 Google,却不售卖证书,只是自己签了自己玩而已。那么哪一家比较好呢?在比较过程中,我注意到了一家叫做 DigiCert 的公司,它在 SSLShopper 的记录中,有超过 1000 人评价,却获得了几乎满分(4.96 / 5),相比之下,GoDaddy 的得分是 3.07,而 Comodo 只有 2.63 分。当然,这评分可能是刷榜刷出来的。不过这家神奇的公司,它的客户有以下这些:

这还只是前三行,排在后面的知名企业还有 HP、西数、GitHub 等。

从评论中可以看出,DigiCert 以优质的服务出名,24 * 7 不间断的客户支持,快速的证书签发是吸引客户的主要方式。那么它家的客户服务到底有多好?我亲自去体验了一下。

由于我目前所使用的证书还没有到期,不会在短时间内停用 GoDaddy 的服务,因为退款也是件麻烦事。于是我就先去注册了一个合作伙伴的帐号,一来可以接触一下他们的客服,二来如果好用的话,之后可以在博客中推广,顺便赚点提成。

注册完成之后 24 小时内(时差原因),就收到了 DigiCert 的销售专员(Reseller Manager)的邮件,向我询问一些问题。后来我发现他们误解我的身份,大概是我申请表上哪里填错了,他们以为我是以公司的名义代理销售,让我提供一些公司的资料。回邮件解释过之后,也是一天之内就收到了通知,说是审核通过了,也就是我可以开始推广它家的产品了。

这个流程似乎很顺利,也没什么过于吸引人的地方。我以为到这里就告一段落了,相当于签了合同,他们坐等新客户,我坐等推广费就可以了。但实际上还没完。两天之后,收到了客户关系经理(Customer Relations Manager)的邮件,说是要和我电话中聊一聊。这……自从上网以来,我一般都只有在退款的时候才需要打电话去要钱,还没碰到过对方主动要求打电话来的情况。好吧,英文聊天也不是什么难事,电话就电话吧。

电话(会议)进行得也很顺利,对方询问了我博客的情况,问我打算如何推广等等,然后介绍了一下 DigiCert 的情况以及一些常规的推广方式。最后还解答了我的一些疑问,我顺便抱怨了一下 DigiCert 暂时没有提供中文客服的弊端,在中国电商这么发达的时代,不和中文市场搞好关系简直是作死。总体来说,聊得很愉快,给我的感觉是客服很专业,解答问题很耐心,解释全面到位。之后一旦有什么问题,再打电话过去也不会觉得尴尬。

电话的最后,由于我抱怨了没有中文不好推广的问题,这位经理贱贱地送了我一个 EV 证书的邀请码。这枚邀请码可以免费注册一个两年的 EV 证书,价值约 460 美元。为什么要说“贱贱地”呢?因为她知道我是个人用户,自己无法注册 EV 证书,送我的目的大概是让我有足够的动力来推广。所以呢,有需求的同学可以私下联系我,先到先得。

另外,如果 DigiCert 也有提供个人版的 SSL 证书,点这里注册

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 证书提供商。