白话Https

本文试图以通俗易通的方式介绍Https的工做原理,不纠结具体的术语,不考证严格的流程。我相信弄懂了原理以后,到了具体操做和实现的时候,方向就不会错,而后条条大路通罗马。阅读文本须要提早大体了解对称加密、非对称加密、信息认证等密码学知识。若是你不太了解,能够阅读Erlang发明人Joe Armstrong最近写的Cryptography Tutorial。大牛出品,通俗易懂,强力推荐。git

Https涉及到的主体

  1. 客户端。一般是浏览器(Chrome、IE、FireFox等),也能够本身编写的各类语言的客户端程序。
  2. 服务端。通常指支持Https的网站,好比github、支付宝。
  3. CA(Certificate Authorities)机构。Https证书签发和管理机构,好比Symantec、Comodo、GoDaddy、GlobalSign。

下图里我画出了这几个角色:
Https Rolegithub

发明Https的动机

  1. 认证正在访问的网站。什么叫认证网站?好比你正在访问支付宝,怎样肯定你正在访问的是阿里巴巴提供的支付宝而不是假冒伪劣的钓鱼网站呢?
  2. 保证所传输数据的私密性和完整性。众所周知,Http是明文传输的,因此处在同一网络中的其它用户能够经过网络抓包来窃取和篡改数据包的内容,甚至运营商或者wifi提供者,有可能会篡改http报文,添加广告等信息以达到盈利的目的。

Https的工做流程

这一节经过介绍Https协议的工做流程,来讲明Https是如何达成本身的两个目的的。下图我画出了Https的工做流程,注意,这只是原理示意图,并非详细的协议解析。浏览器

Https Flow

能够看到工做流程,基本分为三个阶段:安全

  1. 认证服务器。浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,若是认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,而且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。不然,浏览器将提示用户,根据用户的选择,决定是否继续。固然,咱们能够管理这个受信任CA机构列表,添加咱们想要信任的CA机构,或者移除咱们不信任的CA机构。服务器

  2. 协商会话密钥。客户端在认证完服务器,得到服务器的公钥以后,利用该公钥与服务器进行加密通讯,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,能够加密通信的前提下,还要协商两个对称密钥的缘由,是由于非对称加密相对复杂度更高,在数据传输过程当中,使用对称加密,能够节省计算资源。另外,会话密钥是随机生成,每次协商都会有不同的结果,因此安全性也比较高。网络

  3. 加密通信。此时客户端服务器双方都有了本次通信的会话密钥,以后传输的全部Http数据,都经过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。网站

使用Https的流程

若是你是一个服务器开发者,想使用Https来保护本身的服务和用户数据安全,你能够按照如下流程来操做。加密

CA Flow

总结

  1. 说是讨论Https,事实上Https就是Http跑在SSl或者TLS上,因此本文讨论的原理和流程实际上是SSL和TLS的流程,对于其它使用SSL或者TLS的应用层协议,本文内容同样有效。
  2. 本文只讨论了客户端验证服务端,服务端也能够给客户端颁发证书并验证客户端,作双向验证,但应用没有那么普遍,原理相似。
  3. 因为采用了加密通信,Https无疑要比Http更耗费服务器资源,这也是不少公司明明支持Https却默认提供Http的缘由。
相关文章
相关标签/搜索