目录
HTTPS密钥交换算法
HTTPS RSA握手解析
TLS握手过程
HTTPS引入SSL/TLS协议解决了HTTP不安全的问题:易被窃听,易被篡改,易被冒充.具体解决过程参考[HTTP面试题:HTTPS与HTTP:HTTPS解决了HTTP的哪些问题]
不同的密钥交换算法,TLS的握手过程也会发生一些变化.常见的密钥交换算法有RSA,ECDHE.
RSA握手过程
-
TLS第一次握手
客户端会发送一个[Client Hello]的消息,消息里面有随机数(用于之后会话密钥的生成),客户端支持的TLS版本号,支持的密码套件列表.
-
TLS第二次握手
服务器收到客户端的[Client Hello]消息,会确认消息中的TLS版本号是否支持,从密码套件列表中选出一个密码套件,并生成一个随机数,服务器会向客户端发送响应报文,报文中的消息包括生成的随机数(用于之后会话密钥的生成),选择的版本号和选择的密码套件以及用于验证自身身份的身份证书.
密码套件的基本形式:[密钥交换算法+签名算法+对称加密算法+摘要算法]
如:“Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256”,表示的含义是密钥交换算法和签名算法采用RSA,对称加密算法选择AES,生成的密钥长度为128位,摘要算法为SHA256.
这个随机数也是经过公钥加密发送的.这个公钥时客户端的公钥
具体过程:首先客户端是拥有服务器的公钥1的,然后随机生成一对公钥2和私钥2,然后客户端用公钥1加密公钥2发送给服务器,服务器用私钥1解密得到客户端的公钥2,随机数就是用公钥2加密发送的,客户端可以用私钥2解密得到随机数
-
客户端验证证书