HTTPS加密原理

HTTPS传输的加密使用

https在进行内容传输的时候使用的是对称加密

https在进行证书验证阶段使用的是非对称加密

HTTP与HTTPS的区别

  • 默认端口,HTTP是80,HTTPS是443
  • 传输协议,http是超文本传输协议,属于明文传输;https是安全的超文本传输协议,是经过SSL加密后的传输协议
  • 安全性,https使用了TLS/SSL,比http更安全
  • 证书,https需要申请ca证书
  • HTTPS的加密是在传输层完成的,因为SSL是位于传输层的,TLS的前身是SSL。

HTTP的通信过程

作为标准的C/S模型,http协议总是由客户端发起,服务器进行响应。

  1. DNS解析,域名系统DNS将域名解析成IP地址
  2. 建立TCP连接,进行TCP的三次握手
  3. 浏览器发送请求
  4. 服务器响应浏览器,向浏览器发送数据
  5. 通信完成,TCP连接关闭

HTTPS的通信过程

https主要在http的2和3之间,建立了一个加密的连接,这个连接使用了TLS/SSL协议,它是一个安全的传输协议,它的加密使用了对称加密,而不是非对称加密。

通信过程如下 :

  1. DNS解析,域名系统DNS将域名解析成IP地址
  2. 客户端和服务器端通过TCP建立连接,并发送https请求。
  3. 客户端发起TLS握手,向服务端发送ClientHello消息,
    • 客户端支持的SSL/TLS版本
    • 客户端支持的加密套件,比如RSA加密算法
    • 会话session id,(如果有的值的话,服务器端会复用对应的握手信息,避免短时间内重复握手)
    • 客户端随机数,用于生成随机密钥
  4. 服务器收到ClientHello消息,向客户端发送ServerHello消息
    • 服务器所能支持的最高SSL/TLS版本
    • 服务器选择的加密套件列表,比如RSA加密算法
    • 服务器随机数,用于生成随机密钥
    • 服务器的ca证书
  5. 客户端收到ServerHello后,会对收到的证书进行验证。包括验证证书机构、有效期等,验证证书的合法性验证
  6. 验证成功后,Client生成随机数,用于密钥交换过程。客户端会从数字证书中取出服务器的公钥,然后使用它加密报文该随机数,发送到服务器
  7. 服务器使用私钥解密。获取客户端发送的随机数
  8. 客户端使用这三个随机数一起计算出对称加密密钥,同理服务端也可以计算出这个加密密钥。客户端和服务端都计算出加密密钥master secret
  9. 客户端用master secret加密了一条握手完成的消息发送给服务器
  10. 服务器端也回发了一条用master secret加密的握手完成的消息
  11. 服务器将发送的内容用master secret加密,然后发送给客户端
  12. 客户端使用master secret解密收到的消息