站点启用 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 或其它操作系统,可以在这个页面找到相应的介绍。

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 证书,点这里注册