Https工作原理&TLS握手机制

@Kyunban Wong


1.HTTPS作用

HTTPS是在HTTP的基础上提供了数据加密的支持,保证了数据:

  • 私密性
  • 完整性
  • 用来认证客户端和服务端的身份

2.普通HTTP

在普通的HTTP中,数据是明文传输的,很容易出现中间人伪装数据:

  • 面对客户端伪装成服务端,进行窃取数据。
  • 面对服务端伪装成客户端,进行窃取数据。

Https工作原理&TLS握手机制_http

3.HTTPS

HTTPS中使用非对称公钥机制对数据进行加密。HTTPS既能验证对方身份,又能基本避免中间人攻击。

Https工作原理&TLS握手机制_数据_02

HTTPS的加密是通过TLS(Transport Layer Security)安全传输层协议来实现的。

HTTPS协议在客户端和服务端正常通信之前,会先完成TLS的握手。

​Key交换算法的不同,握手过程会也会有所不同,Key交换算法一般有RSA、Diffie Hellman​

以下的讲解以RSA为key的交换算法时的TLS的握手过程,由服务器提供单向认证(HTTPS也可以实现双向认证)

Https工作原理&TLS握手机制_服务器_03

  1. 第一步:浏览器发起​​ClientHello​​消息,消息中包括:TLS版本、加密算法集、随机数(客户諯产生);
  2. 第二步:服务器响应一个​​ServerHello​​消息,消息中包括:TLS版本、加密算法集、随机数(服务器产生);
  3. 第三步:服务器继续发送一个​​Certificate​​消息,附加服务器的证书;
  4. 第四步:服务器发送一个​​ServerHelloDone​​消息;
  5. 第五步:浏览器在收到服务器发来的证书后,验证是否是受信任的机构签发的,是否是真实的服务器;
  6. 第六步:认证服务器的身份后,浏览器使用证书中附带的公钥生成premaster secret作为ClientKeyExchange,并把生成的premaster secret传给服务器;
  7. 第七步:服务器接着使用私钥解密得到premaster secret
  8. 第八步:浏览器和服务器分别使用premaster secret和之前收到的对方的随机数生成相同的master key,用于加密和解密后续所有的通信;
  9. 第九步:浏览器向服务器发送​​ChangeCipherSpec​​​消息,然后发送用​​master key​​加密的Finished消息;
  10. 第十步:服务器接收并验证,接着服务器向浏览器也发送​​ChangeCipherSpec​​​消息,然后发送用​​master key​​加密的Finished消息;
  11. 第十一步:浏览器接收并验证,至此TLS握手完成。