HTTPS 小白知识(一)

10月发生的 Apple 在iOS 可信根证书列表中屏蔽其对中级CA WoSign(沃通) CA Free SSL Certificate G2 的信任 让许多普通人第一次接触到了 HTTPS 这个已经陪伴了我们很久的技术。作为程序员,我们应该更多地了解 HTTPS 的相关知识。

HTTPS 到了应该全面普及的时候了。

HTTPS 是什么?

Wikipedia 上,HTTPS的解释是:

HTTPS 也被叫做“基于 TLS 的 HTTP,基于 SSL 的 HTTP,HTTP 安全“,它是一个在 Internet 上广泛使用的计算机网络安全通信协议。

HTTPS (also called HTTP over TLS, HTTP over SSL, and HTTP Secure) is a protocol for secure communication over a computer network which is widely used on the Internet.

由于现代浏览器的普及,对于普通用户来说,不会太关注 HTTP 后面多的那个 'S' 。现代浏览器在解析域名的时候都可以做到不必输入 HTTP 或者 HTTPS,就能直达网站。一些网站把自己的 HTTP 网站重定向到 HTTPS 网站。而一些网站则同时提供 HTTP 和 HTTPS 网站。网站是否支持 HTTPS,是由网站开发者/提供者决定的。

通过 HTTP 协议传输的信息是明文的。网络包从客户端/浏览器到服务器的这段过程中,需要经过多个网络设备。我们的登录帐号、密码可以轻易被任何一个中间设备探测到。

HTTPS 是非常安全的。信息在客户端/浏览器中被加密,服务器通过私钥解密。中间设备如果没有私钥,就无法解密。

 1digraph https_transport {
 2    graph[fontsize=30;rankdir="LR",label="HTTP(S)传输"];
 3    node[shape=box];
 4    { node[shape=cds]; middle1; middle2; middle3; middle4 }
 5    { node[shape=doubleoctagon]; server1; server2 }
 6
 7    client1[label="客户端"];
 8    client2[label="客户端"];
 9    middle1[label="中间设备"]
10    middle2[label="中间设备"]
11    middle3[label="中间设备"]
12    middle4[label="中间设备"]
13    server1[label="服务端"];
14    server2[label="服务端"];
15
16    subgraph cluster_https{
17        label="HTTPS";
18        edge[headlabel="密文"];
19        client1 -> middle1 -> middle2 -> server1;
20    }
21
22    subgraph cluster_http{
23        label="HTTP";
24        edge[headlabel="明文"];
25        client2 -> middle3 -> middle4 -> server2
26    }
27}

Graphviz chart 2598-https-transport-0.png

示意图采用 graphviz 绘制,下载源码:

1 文件

大公司在 HTTPS 的推进上也是不遗余力的。Google 在 2010年5月 就已经实现了全站 HTTPS 支持。2011年,Google 更是要求 Google要求广告主必须在其网站部署SSL证书

Apple 也对 HTTPS 进行了强力推动。我在 2014 年发布 Apple 企业应用的时候,就碰到了必须使用 HTTPS 的问题:iOS 7.1在线安装IPA失败以及数字证书 。Apple 还要求 2017 年必须在上架 AppStore 的 App 中使用 HTTPS :App Transport Security REQUIRED January 2017

在国内,腾讯、网易等网站虽然没有启用全站 HTTPS,但涉及到帐号的页面(例如 QQ 注册网易邮箱注册)均使用了 HTTPS。微信要求支付回调页面必须使用 HTTPS 协议。一些新兴的互联网公司,例如 直播平台斗鱼 甚至超前实现了全站 HTTPS 支持。

所以,HTTPS 到了应该全面普及的时候了。

HTTPS 证书

HTTPS 是由客户端和服务端一起实现的。对于普通用户来说,最常见的客户端就是浏览器。浏览器在访问支持 HTTPS 的网站时,会对该网站的证书进行校验,若证书有问题,则会给出提示:

Mail

若该证书通过了校验,在浏览器地址栏中就会显示一个绿色的小锁,代表这个网站是安全的。下图就是全球最大的男性交友网站的 HTTPS 安全提醒:

Github

要申请一个证书,我们需要找 CA(Catificate Authority)。任何组织和个人都可以扮演 CA 的角色,给自己签发证书。全球最大的火车票销售网站就是这么干的:

12306 web

但是从下面的表现也能看出来,这么着自己给自己发证书,浏览器(Safari)是不认的。你得手动信任该证书才能正常买票。从安全角度来说,我个人并不建议你信任 12306 的那个一看就很不专业的根证书。

12306 kyfw

因此,我们必须找一个信得过的 CA 来申请证书。得到各大浏览器信任的内置根证书(内置于浏览器或操作系统)颁发机构 TOP5 是 Symantec、Comodo、Godaddy、GolbalSign 和 Digicert。

上面提到的证书颁发机构都是根证书颁发机构。为了方便分级管理,根证书颁发机构一般会颁发几个中级证书颁发机构证书,然后再由中级证书颁发机构面向个人或者机构颁发证书。文章开头提到的 9月30日 Apple 在iOS 可信根证书列表中屏蔽其对中级CA WoSign(沃通) CA Free SSL Certificate G2 的信任,处理的就是沃通的中级证书(而不是根证书)。

证书是 HTTPS 安全最重要的保证。如果有一家 CA 公司签发虚假的证书,或者颁发的证书时间有问题会怎样?它会被浏览器或操作系统公司处罚。

沃通(WoSign) 被处罚的情况

声明:以下内容是根据 参考 中的内容整理而成。不代表本站观点。

沃通(WoSign)是国内市场占有率最高的 CA,上面两次谈到它被 Apple 处罚的情况。实际上,并非只有 Apple 处罚了沃通。

2016 年 8 月 17 日,谷歌接到了 GitHub 安全团队的通告,称沃通在没有得到他们授权的情况下签发了一个 GitHub 的证书。谷歌于 10 月 31 日发布了 Chrome 56 的 Dev 渠道版本,决定从该版本的 Chrome 开始,不再信任沃通和 StartCom 于 2016 年 10 月 21 日之后签发的证书。

Mozilla(Firefox 的开发商)也对沃通进行过处罚。主要的原因是沃通故意通过倒填日期来规避 SHA-1 停用政策:CA:WoSign Issues 。在 Mozilla 披露的技术细节中显示,StartCom 已经开始使用沃通的基础架构来签发新的证书了。而且,StartCom 也和沃通一样在 2016 年采用了倒填日期的手段来签发 SHA-1 证书。Mozilla 的安全工程师也展示了这种违例的案例细节。

10 月 7 日,沃通公布了它的 最新事故报告,CEO 王高华宣布辞职。

在沃通的报告中,王高华称 2015 年 8 月沃通与以色列 CA 公司 StartCom 达成了收购协议,100% 收购了 StartCom。在报告中,沃通承认它在 2016 年 1 月 1 日之后签发了 64 个倒填日期的 SHA-1 证书,王高华表示承担错误的责任。

StartSSL.com 是 StartCom 的网站。

奇虎 360 持有沃通 84% 的股份。

沃通的遭遇比起 CNNIC 还要好一点,CNNIC 的根证书都已经被各大浏览器和操作系统吊销 。连它自己的网站都在使用 DigiCert 颁发的证书。

臆测

前段时间,有几位同事在 Mac 上无法访问微信企业号的二维码验证,可能与证书失效有关。

我自己也碰到了在 macOS 上使用 Chrome/Safari 无法访问淘宝 、阿里云的问题,可能与证书失效有关。

去哪些 CA 申请证书?

从最近卡梅隆大学的论文 Shedding Light on the Adoption of Let’s Encrypt 提到的数据可以看出,Let's encrypt 的确在推动 HTTPS 的普及。

Let's Encrypt

HTTPS 的资源占用

有人会担心网站全面切换到 HTTPS 后会占用大量的服务器资源用于加密和解密运算。知乎有篇文章 HTTPS 要比 HTTP 多用多少服务器资源 回答了这个问题。我这里就直接引用结论了:

2010年1月 Gmail切换到完全使用 https, 前端处理 SSL 机器的CPU 负荷增加不超过1%,每个连接的内存消耗少于20KB,网络流量增加少于2%。由于 Gmail 应该是使用N台服务器分布式处理,所以CPU 负荷的数据并不具有太多的参考意义,每个连接内存消耗和网络流量数据有参考意义。

参考内容

(第一部分完)

推荐继续阅读腾讯 Bugly 团队的这篇文章: 全站 HTTPS 来了 ,比本文更详细,知识点更多。