TLS 协议
1、证实服务端身份
技术:PKI 数字证书/数字签名 ECDSA(Elliptic Curve Digital Signature Algorithm 椭圆曲线数字签名算法)、RSA;
2、证实客户端身份(可选)
3、会话隔离/临时密钥
密钥交换、 DH(密钥交换协议/算法(Diffie-Hellman)简称 狄费赫夫曼),ECDH
4、双向通信加密
对称加密 AES ,Chacha20
5、数据完整性保护
MAC AEAD HMAC ,GCM
Authenticated Encryption with Associated Data (AEAD) 是一种同时具备保密性,完整性和可认证性的加密形式。
常见的 AEAD 算法如下:
AES-128-GCM
AES-192-GCM
AES-256-GCM
ChaCha20-IETF-Poly1305
XChaCha20-IETF-Poly1305
在具备 AES 加速的 CPU(桌面,服务器)上,建议使用 AES-XXX-GCM 系列,移动设备建议使用 ChaCha20-IETF-Poly1305 系列。
在设计加密系统的时候,请务必选用 AEAD 算法,抛弃旧的 MtE,EtM,E&M 方案。
TLS 1.3
TLS 1.2
ECDSA常用签名算法
-
ECDsaP256, 其公钥长度 72 Bytes,
-
ECDsaP384,其公钥长度 104 Bytes,
-
ECDsaP521 ,其公钥长度 140 Bytes,
P-256 曲线
抓包演示
curl -v --tlsv1.2 --http1.1 百度一下,你就知道
过滤:ip.dst ==110.242.68.4 || ip.dst ==192.168.31.109
ClientHello
客户端版本号
随机数32位
SessiionId
可选算法套件
压缩算法
其他扩展字段
Server_name
EC_param
密码套件 Cipher Suites 是一个16进制的数 0x 是一个枚举值
我的电脑支持 46 个密码套件
client hello 是TLS 第一次握手
hnadsshake type : 握手协议类型
Length : 长度
version : 版本
Random: 客户端随机数
Session : TLS 的Session 而不是 http 的session
http session 默认会话时间是30分钟
TLS session 默认是7天
什么是TLS会话恢复( TLS Session Resumption ) 原创
什么是TLS会话恢复( TLS Session Resumption )_51CTO博客_tls会话复用
目前大多数web浏览器的默认配置可以降低这一风险,在调查的45个浏览器中,三分之二的浏览器仅允许会话ID和会话记录单的会话恢复有效期为60分钟。为了降低通过TLS会话恢复标识符进行跟踪的风险,boffins建议将TLS 1.3中指定的7天会话恢复上限时间减少至10分钟,以确保浏览器制造商解决第三方跟踪。
扩展信息
ServerHello
版本号
随机数32位
SessionId
选定的算法套件
选定的压缩算法
其他扩展字段
ECDHE_RSA_WITH_AES_128_GCM_SHA256 目前被大量使用,安全性较高,并且效率也比较高
Server Key Exchange
服务端接着又发送了三次数据包,客户端才能完整接收到 Certifiate、 Server Key Exchange 、ServerHelloDone
服务器证书、中间证书
密钥交换
密钥交换算法
公钥
签名
声明握手结束
客户端根据服务器返回选定的密钥交换算法,生成公钥并把公钥发送出去
并且根据DH交换的服务器公钥进行计算,计算完成之后就得到了密钥
第二个也是短消息 Change Cipher Spec 声明客户端密钥已经生效
准备切换为加密通信
第三个 还是短消息,声明它的握手动作已经结束了,
认可服务器是通过tls 证书来完成,如果认可这个服务器,继续执行DH交互的动作,同时客户端来完成自己的DH交换,这样就可以计算得到共享密钥。
如果不认可这个服务器,通常我们会在浏览器或者程序里面看到TLS 连接错误
通过DH交互的公钥进行计算,就得到了共享密钥了
当然它也要根据其他的规则导出一些密钥
这时候 握手阶段结束,同时告诉客户端准备进行加密通信
服务端完成DH交换,计算出共享密钥,握手阶段就结束了,从这一步往后全部是TLS完全加密通信,我们此时只能嗅探到通信的密文,无法得到任何原始的密文消息,任何消息的篡改和投放都会被通信双方感知到