深入了解https

1
2
3
4
5
首先HTTPS 不是协议,HTTP+ SSL(Secure Sockets Layer) /TLS(Transport Layer Security)
其实 TCP/IP协议集 包括应用层(HTTP),传输层(TCP),网络层(IP),网络访问层
HTTPS 则是在HTTPTCP 中间增加 SSL(`其实 HTTP 与 SSL中间还可以加 SPDY(http2前身)`)
TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,
其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性

TLS工作原理/流程(来张图感受一下)

TLS/SSL

握手

(1) 客户端向服务器发起请求
  • client_hello
  1. 客户端发起请求,以明文传输请求信息,包含版本信息,加密套件候选列表,压缩算法候选列表,随机数(random_C),扩展字段等信息
(2) 服务端向客户端返回证书/公钥相关
  • server_hello server_certificate sever_hello_done
  1. server_hello 服务端返回协商的信息结果,包括选择使用的协议版本 version,选择的加密套件 cipher suite,选择的压缩算法 compression method、随机数 random_S 等,其中随机数用于后续的密钥协商;
  2. server_certificate 服务器端配置对应的证书链,用于身份验证与密钥交换
  3. sever_hello_done 通知客户端 server_hello 信息发送结束
(3)证书校验(CA证书/PKI 体系)
  1. 客户端验证证书的合法性,如果验证通过才会进行后续通信,否则根据错误情况不同做出提示和操作
(4)对称加密的秘钥生成,发给服务器
  • client_key_exchange change_cipher_spec encrypted_handshake_message
  1. client_key_exchange 合法性验证通过之后,客户端计算产生随机数字 Pre-master,并用证书公钥加密,发送给服务器;

  2. 此时客户端已经获取全部的计算协商密钥需要的信息:两个明文随机数 random_Crandom_S 与自己计算产生的 Pre-master,计算得到协商密钥(这里称为:enc_key)enc_key=Fuc(random_C, random_S, Pre-Master)

  3. change_cipher_spec 客户端通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信

  4. encrypted_handshake_message结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥enc_key与算法进行加密,然后发送给服务器用于数据与握手验证
(5) 服务器验证生成的秘钥
  • change_cipher_spec encrypted_handshake_message
  1. 服务器用私钥解密加密的 Pre-master 数据,基于之前交换的两个明文随机数 random_Crandom_S,计算得到协商密钥(enc_key)enc_key=Fuc(random_C, random_S, Pre-Master);

  2. 计算之前所有接收信息的 hash 值,然后解密客户端发送的 encrypted_handshake_message,验证数据和密钥正确性

  3. change_cipher_spec验证通过之后,服务器同样发送 change_cipher_spec 以告知客户端后续的通信都采用协商的密钥与算法进行加密通信

  4. encrypted_handshake_message服务器也结合所有当前的通信参数信息生成一段数据并采用协商密钥 enc_key与算法加密并发送到客户端

(6)客户端最终验证秘钥,握手结束
  1. 客户端计算所有接收信息的 hash 值,并采用协商密钥解密encrypted_handshake_message,验证服务器发送的数据和密钥,验证通过则握手完成

加密信息传输

  • 开始使用协商密钥与算法进行加密通信。

原文参考