网站开发可选择的方案,淘宝官网首页入口电脑版,网站建设zrhskj,东莞著名网站建设企业前言#xff1a;本篇将介绍TLS握手的实际握手过程#xff0c;TLS握手创建了Client和Server之间“被保护的通道”#xff0c;2个单向通道用来保护批量数据的传输#xff08;通过Confidentiality、Integrity和Authentication#xff09;#xff0c;一个通道是从Client到Ser…前言本篇将介绍TLS握手的实际握手过程TLS握手创建了Client和Server之间“被保护的通道”2个单向通道用来保护批量数据的传输通过Confidentiality、Integrity和Authentication一个通道是从Client到Server另一个是从Server到Client。本篇将介绍最基础的握手 - 即握手采用的是RSA密钥交换并通过追条记录Record的形式来阐述该过程。 在整个握手的过程中Client和Server会交换并计算特定的值。上图两侧的框是双方所拥有的信息。开始时Server已经拥有了证书、公钥和私钥
1、HandshakeClient Hello 第一条Record是Client Hello里面包含5个部分
Version 包含了Client所支持的TLS/SSL的最高版本Random Number - 32 bytes / 256 bits 前4个字节编码时间戳防止两个拥有相同随机数的不同的Client Hello相互发送信息Session ID - 8 bytes / 32 bits 00000...本篇中Client Hello的初始会话ID都是0Cipher Suites Client会发送它所支持的密码套件的列表Server会从中挑选Extensions 如果有扩展的话会包含在握手中本篇不包含扩展
2、HandshakeServer Hello 收到Client Hello后Server会发出Server Hello和Client Hello一样包含5部分
Version 包含了Server所支持的TLS/SSL的最高版本Random Number - 32 bytes / 256 bits 前4个字节编码时间戳Session ID - 8 bytes / 32 bits Server生成的用于识别后续会话密钥的值Cipher Suites Server从Client发送的列表中挑选的密码套件Extensions 如果有扩展的话会包含在握手中本篇不包含扩展
在Client Hello和Server Hello之后Client和Server都获得了额外的信息
两者都知道了互相支持的TLS版本。如果Client发送说它支持TLS 1.3Server返回说它支持TLS 1.2这就表明两者互相支持的最高的版本是TLS 1.2两者将用TLS 1.2协议进行握手两者都知道了互相的随机数Client Random、Server Random两者也知道未来会用来参考本次会话的ID互相同意的用来保护这次TLS会话的密码套件
3、HandshakeCertificate 这条记录包含了Server证书和完整的证书链Client会收到证书和公钥。Client收到证书后会问自己2个问题证书是否合法用CA公钥进行的签名可以验证其合法性在此处Client拥有了其所需要的东西来验证该签名Server是否是该证书的真正拥有者验证Server拥有与证书匹配的私钥会由Key Exchange Record所验证
4、HandshakeServer Hello Done 这是一条空的Record表明Server此时没有更多信息进行发送然而握手的其他变体可能会要求Server发送更多信息。
5、HandshakeClient Key Exchange Client Key Exchange有2个主要目的
创建相互的密钥材料例如SEED Value种子值Client和Server两者都用来生成会话密钥证明Server确实是该证书的拥有者 2个目的都将由特殊的值所达成即 Pre Master Secret预主密钥。上图中用红色虚线框描述表明该值是加密发送的
Pre Master Secret 的生成 Client生成 Pre-Master-Secret 包含48个字节 2 bytes - TLS/SSL Version46 bytes - Random随机生成的之后Pre-Master-Secret 会被Server的公钥进行加密Client已经有了因为前面的Record中Server已经发送了Pre-Master-Secret 被加密后进行在线传输唯一能提取该加密信息的是拥有与之相匹配的私钥的一方即有对应私钥的Server现在两者就都拥有了 Pre-Master-SecretPre Master Secret 的生效在本例中该值被用作种子值来生成TLS会话密钥 双方都有了匹配的SEED Value 种子值被用来生成会话密钥预主密钥被用来生成主密钥Master Secret[ 将其他值与PreMasterSecret相结合这些值是“master secret”文字字符串包含在RFC里了、Client Random和Server Random这4个值会相互结合来生成Master Secret ]主密钥被用来生成会话密钥 [ 将其他值与Master Secret相结合这些值是“Key expansion”文字字符串、Client Random和Server Random这4个值会相互结合来生成会话密钥 ] 至少生成4个会话密钥2套不同的密钥 保护Client发送信息的Client Encryption Key和Client HMAC Key保护Server发送信息的Server Encryption Key和Server HMAC Key特定加密协议需要 I.V. 即 Initializational Vector初始化向量这是PRF计算必要的I.V.的步骤计算涉及PRF - Pseudo Random Function伪随机数函数 生成任意长度的摘要的哈希算法 到此Client和Server双方都有了完全相同的会话密钥但是Client或Server并不知道另一方拥有相同的密钥。 因而余下的握手将给双方证明另一方拥有正确的会话密钥。
6、Change Cipher Spec不是Handshake Record 该记录表明Client已做好安全通话的一切准备意味着它可以计算出会话密钥了。我们可以阅读该记录Client在说它做好准备去更改由Client和Server所指定的密码。
7、HandshakeFinished
向Server证明Client有正确的会话密钥这会由特定的值Encrypted Verification来完成过程如下 Client计算出之前所有握手记录5个的哈希这5个记录会一起被哈希生成Handshake Hash然后Handshake Hash会与其他值“client finish”字符串和Master Secret相结合来生成验证数据Verification Data最终验证数据会被Client Session Keys加密生成加密验证 Server用自己的Client会话密钥副本进行验证验证Client和Server“看见”相同的握手记录 理论上Server也看见了之前5个握手记录即Handshake Hash“client finished”字符串同时Server也有Mater Secret这表明Server能合并得到相同的Verification Data之后Server收到加密验证后用Client Session Key副本去进行解密如果得到的结果和Server自己合并得到的验证数据相同这就向Server表明Client拥有相同的会话密钥。如果有人在Client发送出Client Hello后Server接受到之前进行篡改两边的Verification Data会不匹配
8、Change Cipher Spec不是Handshake Record 该记录表明Server已做好安全通话的一切准备意味着它可以计算出会话密钥了
9、HandshakeFinished
向Client证明Server有正确的会话密钥类似的过程 Client计算出之前所有握手记录6个的哈希得到Handshake HashHandshake Hash会与其他值“server finish”字符串和Master Secret相结合来生成验证数据Verification Data验证数据会被Server Session Keys加密生成加密验证 Client用自己的Server会话密钥副本进行验证 在此刻的握手中Client和Server都计算出相同的会话密钥并且相互向对方证明自己有正确的会话密钥。这意味着两者可以开始分享批量数据了并用协商好的会话密钥保护该数据。 以上就是TLS握手我们阐述的是basic handshake的全部过程 需要知道的是TLS握手发生在我们每次访问HTTPS网站的时候或者每次我们链接SSL VPNVirtual Private Network的时候 参考文献
1、网站https://www.practicalnetworking.net/practical TLS