HTTPS连接过程及中间人攻击防范
所属分类 http
浏览量 911
Client Hello
客户端向服务端发送 Client Hello 消息
包含客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)和 SSL Version 等信息
Server Hello
服务端向客户端发送 Server Hello 消息,
从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,
这个套件决定了后续加密和生成摘要时具体使用哪些算法
另外还会生成一份随机数 Random2
客户端和服务端 拥有两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到
Certificate
服务端将证书下发给客户端,让客户端验证自己的身份,验证通过后取出证书中的公钥
Certificate Request
服务端要求客户端上报证书,这一步可选,对安全性要求高的场景会用到
Server Hello Done
通知客户端 Server Hello 过程结束
Certificate Verify
客户端收到服务端传证书后,先从 CA 验证该证书的合法性,
验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,
再用服务端公钥非对称加密 Random3 生成 PreMaster Key
Client Key Exchange
将 PreMaster Key 传给服务端,服务端私钥密得到客户端生成的 Random3
客户端和服务端 拥有 Random1 + Random2 + Random3,两边再根据同样的算法就可以生成一份秘钥
握手结束后 应用层数据使用这个秘钥进行对称加密
为什么要使用三个随机数 ?
因为 SSL/TLS 握手过程的数据是明文传输,多个随机数种子生成秘钥不容易被暴力破解
Change Cipher Spec(Client)
客户端通知服务端后面再发送的消息都会使用前面协商出来的秘钥加密了,是一条事件消息。
Encrypted Handshake Message(Client)
对应 Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息
服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的
Change Cipher Spec(Server)
服务端通知客户端后面再发送的消息都会使用加密,也是一条事件消息。
Encrypted Handshake Message(Server)
对应 Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息
客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的
Application Data
双方已安全地协商出了同一份秘钥,所有的应用层数据都会用这个秘钥加密后再通过 TCP 进行可靠传输
中间人攻击
服务器向客户端发送公钥
攻击者截获公钥
攻击者生成一个伪造的 公钥,发给客户端
客户端收到伪造的公钥后,生成加密hash值发给服务器
攻击者获得加密hash值,用自己的私钥解密获得真秘钥
同时生成假的加密hash值,发给服务器
服务器用私钥解密获得假秘钥
中间人攻击防范
公证人 CA,操作系统做CA证书验证
上一篇
下一篇
aerospike 记录 TTL 说明
写博客的好处
TCP三次握手与四次挥手
xxlrpc例子说明
xxl-job 使用简介
字符集编码基础知识