HTTPS 技术探秘
HTTP 协议(HyperText Transfer Protocol,超文本传输协议):
- 用于客户端与服务器端之间的通信。
- 通过请求报文和响应报文的交换达成通信。
- 是无状态的协议。
HTTP 协议以简单便捷为设计目的,所以并没有提供确保通信安全的服务。
HTTPS(HTTP Secure,超文本传输安全协议),实现了 HTTP 的安全通信。
HTTPS = HTTP + 加密(防窃听) + 认证(防伪装) + 完整性保护(防篡改)。
HTTPS 并非是应用层的一种新协议,而是让 HTTP 和 SSL 通信,SSL 再和 TCP 通信,就变成了 HTTPS。简言之,HTTPS 就是身披 SSL 协议外壳的 HTTP。
SSL 是独立于 HTTP 的协议,提供通信加密、身份认证和完整性保护的功能。不光是 HTTP 协议,其它运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用。可以说 SSL 是当今世界上应用最为广泛的网络安全技术。
SSL 技术最初是由网景公司率先倡导的,开发了 SSL3.0 之前的版本,目前主导权已经转移到了 IETF(Internet Engineering Task Force,Internet 工程任务组)的手中。IETF 以 SSL3.0 为基础,又制订了 TLS1.0、TLS1.1 和 TLS1.2。TSL 是以 SSL 为基础开发的,有时也会将该协议统称为 SSL。当前主流的版本是 SSL3.0 和 TTL1.0。
安全通信的技术实现:
- 通信加密由非对称加密和对称加密实现;
- 身份认证由数字签名实现;
- 完整性保护由信息摘要(或称哈希、散列、单向加密) 实现;
HTTPS的通信流程如下图所示:
能够提供 https 通信的服务器,会先向证书授权中心(CA 机构)申请含有服务器公钥的数字证书。当客户端发起 https 请求后,服务器将含有服务器公钥的证书发给客户端,客户端验证证书的合法性,验证通过后,生成对称加密使用的对称**,然后使用服务器公钥加密对称**,之后将加密后的对称**发给服务器,服务器使用私钥解密得到对称**。此后,双方通信的 http 报文都用对称**进行加解密,实现通信安全。
数字证书的验证过程如下:
数字证书包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过 CA 私钥签名之后的证书内容(经过先通过 Hash 函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过 CA 公钥解密得到证书信息摘要,然后根据证书上描述的计算证书的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后中间人需要将证书重新加密,但是中间人没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果中间人强行乱修改证书,就会导致证书内容和证书签名不匹配。
SSL 证书需要购买申请,功能越强大的证书费用越高。
HTTPS 连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
HTTPS 协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似 12306 网站的主页使用 HTTP 协议,有关于用户信息等方面使用 HTTPS。