2008 年 8 月 TLS v1.2 公布,相隔 10 年,TLS v1.3 于 2018 年 8 月公布,在性能优化和安全上做了非常大更改,与此同时为了防止新协议书产生的更新矛盾,TLS v1.3 也做了兼容模式解决,根据提升拓展协议书来支持旧版的手机客户端和网络服务器。

安全系数
TLS v1.2 支持的加密模块许多,在兼容老版本上做的很全,里边有一些加密抗压强度比较弱和一些存有漏洞的优化算法很可能会被网络攻击运用,为业务流程产生不确定性的安全风险。TLS v1.3 移除开这种不安全的加密优化算法,简单化了加密模块,针对服务器端握手全过程中也降低了一些挑选。
- 清除 MD5、SHA1 登陆密码散列函数的支持,强烈推荐应用 SHA2(例如,SHA-256)。
- 清除 RSA 及全部静态数据密钥(密钥商议不具备前向安全性特点)。
- 外溢 RC4 流登陆密码、DES 对称性加密优化算法。
- 密钥商议时的椭圆曲线优化算法提升 https://www.wanweibaike.net/wiki-X25519 支持。
- 支持带 Poly1305信息短信验证码 的 ChaCha20 流加密优化算法,流加密也是一种对称性加密优化算法。
- 移除开 CBC 分类方式,TLS v1.3 对称性加密仅支持 AES GCM、AES CCM、ChaCha20**-**Poly1305 三种方式。
- 服务器端 “Server Hello” 以后的信息都是会加密传送,因而基本抓包软件剖析便会有疑问为何看不见资格证书信息内容。
性能优化
性能优化一个明显的变动是简单化了 TLS 握手环节,由 TLS v1.2 的 2-RTT 减少为 1-RTT,与此同时在第一次创建连接后 TLS v1.3 还引进了 0-RTT 定义。

来源于 https://www.a10networks.com/wp-content/uploads/differences-between-tls-1.2-and-tls-1.3-full-handshake.png
密钥商议在 TLS v1.2 中必须手机客户端/服务器端彼此互换随机数字和服务器发送完资格证书后,彼此分别推送 “Clent/Server Key Exchange” 信息互换密钥商议所需基本参数。在稳定性上,TLS v1.3 移除开许多不安全优化算法,简单化了登陆密码模块,如今已移除开 “Clent/Server Key Exchange” 信息,在手机客户端推送 “Client Hello” 信息时在拓展协议书里带上支持的椭圆曲线名字、临时性公匙、签字信息内容。网络服务器接到信息后,在 “Server Hello” 消息中告知手机客户端挑选的密钥商议主要参数,从而可少了一次信息来回(1-RTT)。
ClientServerKey^ClientHelloExch| key_share*| signature_algorithms*| psk_key_exchange_modes*v pre_shared_key*-------->ServerHello^Key key_share*|Exch pre_shared_key*v{EncryptedExtensions}^Server{CertificateRequest*}vParams{Certificate*}^{CertificateVerify*}|Auth{Finished}v<--------[ApplicationData*]^{Certificate*}Auth|{CertificateVerify*}v{Finished}-------->[ApplicationData]<------->[ApplicationData]ThebasicfullTLShandshake
当浏览以前浏览过的网站时,手机客户端可以根据运用此前对话中的 预共享资源密钥 (PSK) 将第一条信息上的数据发送至网络服务器,完成 “零来回時间(0-RTT)”。
ClientServerClientHello early_data key_share* psk_key_exchange_modes pre_shared_key(ApplicationData*)-------->ServerHello pre_shared_key key_share*{EncryptedExtensions} early_data*{Finished}<--------[ApplicationData*](EndOfEarlyData){Finished}-------->[ApplicationData]<------->[ApplicationData]MessageFlowfora0-RTTHandshake
TLS v1.3 抓包软件剖析
以一次手机客户端/服务器端详细的 TLS 握手为例子,根据抓包软件剖析看下 TLS v1.3 的握手全过程。下面的图是爬取的 www.zhihu.com 网址数据信息报文格式,且对报文做了破译解决,不然 “Change Cipher Spec” 报文格式后的统计数据都早已被加密是剖析不了的。抓包软件请参照 “tcp协议那些事 - 如何抓包并破译 HTTPS 加密数据信息?”。

image.png
TLS v1.3 握手全过程如下图所示:

tls-1-3-full-handshake.jpg
Client Hello
握手逐渐手机客户端告知服务器端自身的 Random、Session ID、加密模块等。
此外,TLS v1.3 必须关心下 “拓展协议书”,TLS v1.3 根据拓展协议书保证了 “往前兼容“,手机客户端要求的情况下告知网络服务器它支持的协议书、及一些其他拓展协议书主要参数,假如老版本不鉴别就忽视。
下边看好多个关键的拓展协议书:
- supported_versions:手机客户端支持的 TLS 版本,供网络服务器接到后挑选。
- supported_groups:适用的椭圆曲线名字
- key_share:椭圆曲线名称和相对应的临时性公钥信息内容。
- signature_algorithms:签字
TransportLayerSecurityTLSv1.3RecordLayer:HandshakeProtocol:ClientHelloVersion:TLS1.0(0x0301)HandshakeProtocol:ClientHelloHandshakeType:ClientHello(1)Version:TLS1.2(0x0303)Random:77f485a55b836cbaf4328ea270082cdf35fd8132aa7487eae19997c8939a292aSessionID:8d4609d9f0785880eb9443eff3867a63c23fb2e23fdf80d225c1a5a25a900eeeCipherSuites(16suites)CipherSuite:Reserved(GREASE)(0x1a1a)CipherSuite:TLS_AES_128_GCM_SHA256(0x1301)CipherSuite:TLS_AES_256_GCM_SHA384(0x1302)CipherSuite:TLS_CHACHA20_POLY1305_SHA256(0x1303)Extension:signature_algorithms(len=18)Extension:supported_groups(len=10)SupportedGroups(4groups)SupportedGroup:Reserved(GREASE)(0xcaca)SupportedGroup:x25519(0x001d)SupportedGroup:secp256r1(0x0017)SupportedGroup:secp384r1(0x0018)Extension:key_share(len=43)Type:key_share(51)KeyShareextensionClientKeyShareLength:41KeyShareEntry:Group:Reserved(GREASE),KeyExchangelength:1KeyShareEntry:Group:x25519,KeyExchangelength:32Group:x25519(29)KeyExchangeLength:32KeyExchange:51afc57ca38df354f6d4389629e222ca2654d88f2800cc84f8cb74eefd473f4bExtension:supported_versions(len=11)Type:supported_versions(43)SupportedVersionslength:10SupportedVersion:TLS1.3(0x0304)SupportedVersion:TLS1.2(0x0303)
Server Hello
服务端接到手机客户端要求后,回到选中的登陆密码模块、Server Random、选中的椭圆曲线名字及相匹配的公钥(Server Params)、适用的 TLS 版本。
此次的登陆密码模块看见短了许多 TLS_AES_256_GCM_SHA384,在其中用以商议密钥的基本参数是放到 key_share 这一拓展协议书里的。
TLSv1.3RecordLayer:HandshakeProtocol:ServerHelloContentType:Handshake(22)HandshakeProtocol:ServerHelloHandshakeType:ServerHello(2)Version:TLS1.2(0x0303)Random:1f354a11aea2109ba22e26d663a70bddd78a87a79fed85be2d03d5fc9deb59a5SessionID:8d4609d9f0785880eb9443eff3867a63c23fb2e23fdf80d225c1a5a25a900eeeCipherSuite:TLS_AES_256_GCM_SHA384(0x1302)CompressionMethod:null(0)ExtensionsLength:46Extension:supported_versions(len=2)SupportedVersion:TLS1.3(0x0304)Extension:key_share(len=36)Type:key_share(51)KeyShareextensionKeyShareEntry:Group:x25519,KeyExchangelength:32Group:x25519(29)KeyExchange:ac1e7f0dd5a4ee40fd088a8c00113178bafb2df59e0d6fc74ce77452732bc44d
服务端这时取得了 Client Random、Client Params、Server Random、Server Params 四个主要参数,可优先选择测算出预主密钥。在 TLS v1.2 中是历经完第一次消息来回以后,手机客户端优先选择进行要求。
在预估出用以对称加密的对话密钥后,服务端传出 Change Cipher Spec 消息并转换到数据加密方式,以后的全部消息(资格证书、证书认证)传送都是会数据加密解决,也降低了握手期内的密文传送。
Certificate、Certificate Verify、Finished
除开 Certificate 外,TLS v1.3 还多了个 “Certificate Verify” 消息,应用网络服务器公钥对握手信息内容干了一个签字,加强了安全防范措施。
TransportLayerSecurityTLSv1.3RecordLayer:HandshakeProtocol:CertificateTLSv1.3RecordLayer:HandshakeProtocol:CertificateVerifyHandshakeProtocol:CertificateVerifySignatureAlgorithm:rsa_pss_rsae_sha256(0x0804)SignatureHashAlgorithmHash:Unknown(8)SignatureHashAlgorithmSignature:Unknown(4)Signaturelength:256Signature:03208990ec0d4bde4af8e2356ae7e86a045137afa5262ec7c82d55e95ba23b6eb5876ebb…TLSv1.3RecordLayer:HandshakeProtocol:FinishedHandshakeProtocol:FinishedVerifyData
手机客户端转换数据加密方式
手机客户端获得到 Client Random、Client Params、Server Random、Server Params 四个主要参数测算出最后对话密匙后,也会进行 “Certificate Verify”、“Finished” 信息,当手机客户端和服务器端都发了 “Finished” 信息后握手也就完成了,下面就可安全性的传送数据了。
image.png