Https请求流程

整个流程

client server 备注
首先tcp三次握手 >>>
syn
syn,ack
ack
然后tls协议 >>>
client hello client随机数,加上支持的加密套件
server hello server随机数,选择的加密套件
certificate 证书
server key exchange 公钥
server hello done
client key exchange client随机数公钥加密
change cipher spec
encrypted handshake message
change cipher spec
encrypted handshake message
application data application data
最后tcp四次挥手 >>>
fin
ack
fin
ack

https为什么安全

client第二次的随机数作为premaster key,用公钥加密,只有服务端可以用私钥解开,premaster key用做随后http请求对称加密的密钥,整个过程premaster key没有在网络上传输,所以https是安全的。

如何保证对称加密密钥随机性

如果仅仅是上面客户端生成的随机数的话,有可能不太随机,太依赖客户端,加上之前的两个(client+server)的随机数就够了。

如何防止中间人攻击

如果仅仅是上面这些的话,是用不着花大价钱买ca证书的,但是仅仅是这些,无法防止中间人攻击:

premaster key还是暴露无遗