一、密码协商算法
TLS协议中,密码协商的过程当中Client在ClientHello中提供四种optionapp
第一:client 支持的加密套件列表,密码套件里面中能出现Client支持的AEAD算法或者HKDF哈希对,加密
第二: Supported_group 的扩展和 Key_share的 扩展,其中Supported_groups这个扩展代表了Client支持的(EC)DHE group 而 key_share 扩展代表了Client包含一些或者所有(EC)DHE共享。设计
第三: signature_agrorithms 签名算法和 signature_algorithms_cert这个扩展展现了具体的签名算法 signature_algorithms 这个扩展展现了Client能够支持哪些签名算法,signature_algorithms_cert这个扩展展现了具体的证书签名算法server
第四: pre_shared_key 预共享秘钥和 pre_key_exchange_modes扩展,预共享秘钥扩展包含了Client能够识别的堆成秘钥标识 , psk_key_exchange_modes扩展代表了可能能够和psk一块儿使用的的秘钥交换模式。it
二、TLS协议中的两大主要组成部分io
握手协议:cli
握手协议主要处理通讯双方之间认证的全部流程,包括秘钥协商,参数协商、创建共享秘钥。握手洗衣被设计用来抵抗篡改,若是链接未受到攻击,则活动攻击者不该该强制对方协商不一样的参数扩展
记录协议:密码
使用有握手协议创建的参数来保护通讯双方的流量,记录协议将流量分红一系列的记录,美衣伊阁记录独立的使用秘钥保护机密性
三、TLS1.3 支持的基本秘钥交换模式
(EC)DHE 基于有限域或椭圆曲线的Diffe-Hellman、 PSK-only 、PSK with(EC)DHE
四、下面是TLS1.3 握手协议的过程
Client Server
Key ^ ClientHello
Exch | + key_share*
| + signature_algorithms*
| + psk_key_exchange_modes*
v + pre_shared_key* -------->
ServerHello ^ Key
+ key_share* | Exch
+ pre_shared_key* v
{EncryptedExtensions} ^ Server
{CertificateRequest*} v Params
{Certificate*} ^
{CertificateVerify*} | Auth
{Finished} v
<-------- [Application Data*]
^ {Certificate*}
Auth | {CertificateVerify*}
v {Finished} -------->
[Application Data] <-------> [Application Data]
+表示在之前标注的消息中发送的值得注意扩展
*表示 可选的或者依赖必定条件的消息/扩展 ,不老是发送
() 表示消息从 Client-early-traffic_serect 导出的秘钥保护
{} 表示使用一个[sender]handshake_traffic-serect 导出的秘钥保护
[]表示消息使用 [sender]_application_trafic_serect_N导出的秘钥保护
握手能够被认为是三个阶段:
第一个阶段是 : 秘钥交换---- 创建共享秘钥数据并选择密码参数,在这个阶段以后全部的数据都会被加密,
第二个阶段: server参数 : 创建其余的握手参数 (Client是否被认证, 应用层协议支持等)
第三个阶段 : 认证Server (并选择性的认证Client )提供秘钥确认和握手的完整性