密钥交换算法
Diffie-Hellman密钥交换
$A=g^a\,\,(mod\,\,\,p)$
$B=g^b\,\,(mod\,\,\,p)$
$SA = B^a\,\,\,mod\,\,\,p=[g^b\,\,(mod\,\,\,p)]^a\,\,\,mod\,\,\,p$
$SB=A^b\,\,\,mod\,\,\,p=[g^a\,\,(mod\,\,\,p)]^b\,\,\,\,mod\,\,\,p$
$SA=B^a\,\,\,mod\,\,\,p=[g^b\,\,(mod\,\,\,p)]^a\,\,\,mod\,\,\,p=\,g^{ab}(mod\,\,\,p)=[g^a\,\,(mod\,\,\,p)]^b\,\,\,\,mod\,\,\,p=A^b\,\,\,mod\,\,\,p$
$SA=SB可证明$
注:
- g和p的值是AB都已知的,a是客户端生成的随机数,b是服务端生成的随机数
- 客户端发送DHE交换的请求,服务器生成随机数b,可计算出B,发送给客户端,客户端生成随机数a,计算出A,发送给服务端
- 交换计算出的AB,A用自己的私钥加密得到的B,B用自己的私钥加密得到的A,得到对称密钥
- 在TLS里,SA和SB就是预主密钥,pre_master_key
RSA
…
TLS 双向认证(mTLS)
- 客户端发起请求
- 「验证服务端是否可信」:服务端将自己的 TLS 证书发送给客户端,客户端通过自己的 CA 证书链验证这个服务端证书。
- 「验证客户端是否可信」:客户端将自己的 TLS 证书发送给服务端,服务端使用它的 CA 证书链验证该客户端证书。
- 协商对称加密算法及密钥
- 使用对称加密进行后续通信。