HTTPS加密过程

参考:https://www.cnblogs.com/fengf233/p/11775415.html

https加密过程

由于HTTP的内容在网络上实际是明文传输,并且也没有身份验证之类的安全措施,所以容易遭到挟持与攻击

HTTPS是通过SSL(安全套接层)和TLS(安全传输协议)的组合使用,加密TCP载荷即HTTP报文内容,同时通过不对称密钥方式认证身份,保证传输的安全可靠

即:HTTP+加密+认证+完整性保护=HTTPS

对称加密

即:使用相同的密钥进行编/解码的算法,也就是共享密钥

image

非对称加密

需要两个密钥,一个是公钥,一个是私钥。

公钥和私钥是成对生成的。

用公钥加密的密文只能用对应的私钥解开,用私钥加密的密文只能用对应的公钥解开。

image

在https中,同时使用对称加密和非对称加密。

image

加密过程:

  1. 首先server需要向CA提交自己的公钥,来换取一个CA证书。

     CA证书当中就包括server提交的公钥的数字签名。
    
  2. client预先安装CA的公钥,用来校验server下发给client的公钥。

  3. 当client想server发送https请求时。首先做TCP的三次握手,然后开始第四次握手。

  4. 第四次握手的内容包括:

    • client生成一个random1和自己支持的加密算法发给server
    • server生成一个random2和server确认用哪个加密算法加密发给client
    • 同时server下发证书给client
    • client拿到证书后,取出里面的公钥,并对公钥进行校验,成功后,用这个公钥加密一个random3,得到一个PreMaster Key给server,自己同时也通过random123算出一个共享密钥key进行数据加密
    • server拿到PreMaster Key之后用自己的私钥解码得到random3, 然后用已知的random123算出一个共享密钥key来进行数据加密
  5. 之后的数据传输都会使用这个共享密钥来进行数据加密和解密

image

其他:

如果每次重连都要重新握手还是比较耗时的,所以可以对握手过程进行优化,可以在 Client Hello 消息里还附带了上一次的 Session ID,服务端接收到这个 Session ID 后如果能复用就不再进行后续的握手过程。

原文地址:https://www.cnblogs.com/dream2sky/p/14235424.html