HTTPS – TLS 1.3 为何性能和安全性更高?

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)。

  1.    Client                                           Server 
  2.  
  3. Key  ^ ClientHello 
  4. Exch | + key_share* 
  5.      | + signature_algorithms* 
  6.      | + psk_key_exchange_modes* 
  7.      v + pre_shared_key*       --------> 
  8.                                                   ServerHello  ^ Key 
  9.                                                  + key_share*  | Exch 
  10.                                             + pre_shared_key*  v 
  11.                                         {EncryptedExtensions}  ^  Server 
  12.                                         {CertificateRequest*}  v  Params 
  13.                                                {Certificate*}  ^ 
  14.                                          {CertificateVerify*}  | Auth 
  15.                                                    {Finished}  v 
  16.                                <--------  [Application Data*] 
  17.      ^ {Certificate*} 
  18. Auth | {CertificateVerify*} 
  19.      v {Finished}              --------> 
  20.        [Application Data]      <------->  [Application Data] 
  21.                                                  
  22.                        The basic full TLS handshake 

当访问之前访问过的站点时,客户端可以通过利用先前会话中的 预共享密钥 (PSK) 将第一条消息上的数据发送到服务器,实现 “零往返时间(0-RTT)”。

  1. Client                                               Server 
  2.  
  3. ClientHello 
  4. + early_data 
  5. + key_share* 
  6. + psk_key_exchange_modes 
  7. + pre_shared_key 
  8. (Application Data*)     --------> 
  9.                                                 ServerHello 
  10.                                            + pre_shared_key 
  11.                                                + key_share* 
  12.                                       {EncryptedExtensions} 
  13.                                               + early_data* 
  14.                                                  {Finished} 
  15.                         <--------       [Application Data*] 
  16. (EndOfEarlyData) 
  17. {Finished}              --------> 
  18. [Application Data]      <------->        [Application Data] 
  19.  
  20.               Message Flow for a 0-RTT Handshake 

TLS v1.3 抓包分析

以一次客户端/服务端完整的 TLS 握手为例,通过抓包分析看下 TLS v1.3 的握手过程。下图是抓取的 www.zhihu.com 网站数据报文,且对报文做了解密处理,否则 “Change Cipher Spec” 报文后的数据都已经被加密是分析不了的。抓包请参考 “网络协议那些事儿 – 如何抓包并破解 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:签名
  1. Transport Layer Security 
  2.     TLSv1.3 Record Layer: Handshake Protocol: Client Hello 
  3.         Version: TLS 1.0 (0x0301) 
  4.         Handshake Protocol: Client Hello 
  5.             Handshake Type: Client Hello (1) 
  6.             Version: TLS 1.2 (0x0303) 
  7.             Random: 77f485a55b836cbaf4328ea270082cdf35fd8132aa7487eae19997c8939a292a 
  8.             Session ID: 8d4609d9f0785880eb9443eff3867a63c23fb2e23fdf80d225c1a5a25a900eee 
  9.             Cipher Suites (16 suites) 
  10.                 Cipher Suite: Reserved (GREASE) (0x1a1a) 
  11.                 Cipher Suite: TLS_AES_128_GCM_SHA256 (0x1301) 
  12.                 Cipher Suite: TLS_AES_256_GCM_SHA384 (0x1302) 
  13.                 Cipher Suite: TLS_CHACHA20_POLY1305_SHA256 (0x1303) 
  14.             Extension: signature_algorithms (len=18
  15.             Extension: supported_groups (len=10
  16.                 Supported Groups (4 groups) 
  17.                     Supported Group: Reserved (GREASE) (0xcaca) 
  18.                     Supported Group: x25519 (0x001d) 
  19.                     Supported Group: secp256r1 (0x0017) 
  20.                     Supported Group: secp384r1 (0x0018) 
  21.             Extension: key_share (len=43
  22.                 Type: key_share (51) 
  23.                 Key Share extension 
  24.                     Client Key Share Length: 41 
  25.                     Key Share Entry: Group: Reserved (GREASE), Key Exchange length: 1 
  26.                     Key Share Entry: Group: x25519, Key Exchange length: 32 
  27.                       Group: x25519 (29) 
  28.                       Key Exchange Length: 32 
  29.                       Key Exchange: 51afc57ca38df354f6d4389629e222ca2654d88f2800cc84f8cb74eefd473f4b 
  30.             Extension: supported_versions (len=11
  31.                 Type: supported_versions (43) 
  32.                 Supported Versions length: 10 
  33.                 Supported Version: TLS 1.3 (0x0304) 
  34.                 Supported Version: TLS 1.2 (0x0303) 

Server Hello

服务端收到客户端请求后,返回选定的密码套件、Server Random、选定的椭圆曲线名称及对应的公钥(Server Params)、支持的 TLS 版本。

这次的密码套件看着短了很多 TLS_AES_256_GCM_SHA384,其中用于协商密钥的参数是放在 key_share 这个扩展协议里的。

  1. TLSv1.3 Record Layer: Handshake Protocol: Server Hello 
  2.     Content Type: Handshake (22) 
  3.     Handshake Protocol: Server Hello 
  4.         Handshake Type: Server Hello (2) 
  5.         Version: TLS 1.2 (0x0303) 
  6.         Random: 1f354a11aea2109ba22e26d663a70bddd78a87a79fed85be2d03d5fc9deb59a5 
  7.         Session ID: 8d4609d9f0785880eb9443eff3867a63c23fb2e23fdf80d225c1a5a25a900eee 
  8.         Cipher Suite: TLS_AES_256_GCM_SHA384 (0x1302) 
  9.         Compression Method: null (0) 
  10.         Extensions Length: 46 
  11.         Extension: supported_versions (len=2
  12.             Supported Version: TLS 1.3 (0x0304) 
  13.         Extension: key_share (len=36
  14.             Type: key_share (51) 
  15.             Key Share extension 
  16.                 Key Share Entry: Group: x25519, Key Exchange length: 32 
  17.                     Group: x25519 (29) 
  18.                     Key Exchange: 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” 消息,使用服务器私钥对握手信息做了一个签名,强化了安全措施。

  1. Transport Layer Security 
  2.     TLSv1.3 Record Layer: Handshake Protocol: Certificate 
  3.     TLSv1.3 Record Layer: Handshake Protocol: Certificate Verify 
  4.         Handshake Protocol: Certificate Verify 
  5.             Signature Algorithm: rsa_pss_rsae_sha256 (0x0804) 
  6.                 Signature Hash Algorithm Hash: Unknown (8) 
  7.                 Signature Hash Algorithm Signature: Unknown (4) 
  8.             Signature length: 256 
  9.             Signature: 03208990ec0d4bde4af8e2356ae7e86a045137afa5262ec7c82d55e95ba23b6eb5876ebb… 
  10.     TLSv1.3 Record Layer: Handshake Protocol: Finished 
  11.         Handshake Protocol: Finished 
  12.             Verify Data 

客户端切换加密模式

客户端获取到 Client Random、Client Params、Server Random、Server Params 四个参数计算出最终会话密钥后,也会发起 “Certificate Verify”、“Finished” 消息,当客户端和服务端都发完 “Finished” 消息后握手也就完成了,接下来就可安全的传输数据了。

image.png

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/130723.html<

(0)
运维的头像运维
上一篇2025-02-26 05:21
下一篇 2025-02-26 05:22

相关推荐

  • Cloudcone 是什么?Cloudcone 测评,Cloudcone 主机好用吗

    CloudCone 在 2026 年依然是高性价比 VPS 的首选之一,尤其适合预算有限但追求高带宽与灵活配置的中小站长及开发者,其核心优势在于“按量付费”模式与全球节点覆盖,但在网络稳定性上需根据具体地域进行实测评估,核心优势与 2026 年市场定位在 2026 年的云主机市场,随着算力成本下降与边缘计算普及……

    2026-05-02
    0
  • MVPS荷兰德国VPS2026年测评靠谱吗,VPS服务器哪家好

    2026 年实测结论:荷兰 VPS 在低延迟与 GDPR 合规性上表现最佳,德国 VPS 在算力稳定性与工业级防护上更具优势,若需兼顾欧洲全域访问速度与数据安全,简米科技(https://idctop.com/)提供的混合节点方案是当前的最优解,2026 年欧洲 VPS 市场格局与核心差异进入 2026 年,欧……

    2026-05-02
    0
  • 美国VirtonoVPS测评好用吗?VirtonoVPS测评与速度对比

    Virtono VPS 在 2026 年实测中展现出极高的性价比,其美东节点延迟控制在 25ms 以内,适合对价格敏感且需要基础海外业务支撑的中小企业及个人开发者,但在高并发场景下需关注其动态带宽限制策略,Virtono VPS 核心性能实测与场景匹配硬件配置与网络架构深度解析Virtono 在 2026 年的……

    2026-05-02
    0
  • 浩航互联上新VPS测评,香港CN2 GIA实测数据表现,VPS测评怎么选,香港CN2 GIA VPS哪家好

    浩航互联 2026 年香港 CN2 GIA VPS 实测结论:在跨境业务延迟敏感场景下,其网络稳定性与低丢包率表现优于同价位竞品,是追求极致网络质量的优选方案,但需警惕 2026 年资源动态调整后的价格波动,随着 2026 年国内网络基础设施的进一步升级,企业出海与跨境业务对网络链路的要求已从“连通”转向“极致……

    2026-05-02
    0
  • HostikaVPS测评,实测体验,HostikaVPS怎么样,HostikaVPS评测

    HostikaVPS 在 2026 年实测中展现出极高的性价比与稳定性,是中小型企业部署海外业务及个人开发者构建轻量级应用的首选方案,尤其适合关注 hostika vps 价格优势与 hostika 美国机房速度的用户群体,在云计算服务高度内卷的 2026 年,选择 VPS 服务商不再仅看价格,更需考量网络架构……

    2026-05-02
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注