由上图可见 HTTPS 比 HTTP 多做了一层 TSL or SSL 的安全层。
TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等许多密码学前沿技术。
对了,最开始先提出的是 SSL,自 1996 年后,SSL v3 改名叫 TLS 1.0,目前运用最广泛的是 TLS 1.2。
TLS 握手
- 指定将使用的TLS版本(TLS 1.0、1.2、1.3等)
- 确定将使用哪些加密套件。
- 通过服务器的公钥和SSL证书颁发机构的数字签名来验证服务器的身份
- 握手完成后,生成会话密钥以使用对称加密
TLS 中有两种主要的握手类型:一种基于 RSA,一种基于 Diffie-Hellman(DH)。这两种握手类型的主要区别在于主秘钥交换和认证上。而 RSA 是主流,就讲 RSA 握手。
流程图如下,图出自HTTPS篇之SSL握手过程详解
- 客户端hello:客户端通过向服务器发送“问候”消息来发起握手。该消息将包括客户端支持的TLS版本,支持的加密套件以及称为“客户端随机”的随机字节字符串。
- 服务器hello:为回复客户端hello消息,服务器发送一条消息,其中包含服务器的SSL证书,服务器选择的加密套件和“服务器随机数”,即服务器生成的另一个随机字节串。
- 客户端发送公钥加密的预主密钥。
- 服务器用自己的私钥解密加密的预主密钥。
- 客户端finished:客户端发送“完成”消息,该消息已用会话密钥加密。
- 服务器finished:服务器发送一条用会话密钥加密的“完成”消息。
握手完成,后续通过主密钥加解密。
密码套件
密码套件(cipher suite)是一组选定的加密基元和其他参数,它可以精确定义如何实现安全。套件大致由以下这些属性定义。
- 身份验证方法
- 密钥交换方法
- 加密算法
- 加密密钥大小
- 密码模式(可应用时)
- MAC算法(可应用时)
- PRF(只有TLS1.2一定使用,其他版本取决于各自协议)
- 用于Finished消息的散列函数(TLS1.2)
- verify_data结构的长度(TLS1.2)
对称加密有AES 和 CHACHA20, 分组模式以前有 CBC、CTR,但 TLS1.3 中只剩下 GCM。非对称加密 RSA、ECDHE,哈希摘要算法(Sha256, Sha384,md5)