加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

我们来一起说说HTTPS中间人攻击与证书校验

发布时间:2017-03-26 19:41:30 所属栏目:经验 来源:小小水滴
导读:副标题#e# 一、前言 随着安全的普及,https通信应用越发广泛,但是由于对https不熟悉导致开发人员频繁错误的使用https,例如最常见的是未校验https证书从而导致“中间人攻击”,并且由于修复方案也一直是个坑,导致修复这个问题时踩各种坑,故谨以此文简单

   支付宝官网签名证书。

wKioL1jQ2b3iUAMlAABejRXhUuo907.png

wKiom1jQ2erBg6jqAABkji3v3K4683.png

    不仅仅进行证书链的校验,此时还会进行另一个协议即Online Certificate Status Protocol, 该协议为证书状态在线查询协议,一个实时查询证书是否吊销的方式,客户端发送证书的信息并请求查询,服务器返回正常、吊销或未知中的任何一个状态,这个查询地址会附在证书中供客户端使用。

5.Server Hello Done

    这是一个零字节信息,用于告诉客户端整个server hello过程已经结束。

wKioL1jQ2n3hhQjeAAC1aEvUT28345.png

6.ClientKeyExchange

wKiom1jQ3AOgZMRNAAC5i-FMh-8523.png

    客户端在验证证书有效之后发送ClientKeyExchange消息,ClientKeyExchange消息中,会设置 48 字节的premaster secret(因为的TLS版本的原因,这里没有显示premaster),通过密钥交换算法加密发送premaster secret的值,例如通过 RSA公钥加密premaster secret的得到Encrypted PreMaster传给服务端。PreMaster前两个字节是TLS的版本号,该版本号字段是用来防止版本回退攻击的。

    从握手包到目前为止,已经出现了三个随机数(客户端的random_c,服务端的random_s,premaster secret),使用这三个随机数以及一定的算法即可获得对称加密AES的加密主密钥Master-key,主密钥的生成非常的精妙。

7.Change Cipher Spec

    发送一个不加密的信息,浏览器使用该信息通知服务器后续的通信都采用协商的通信密钥和加密算法进行加密通信。

wKiom1jQ3h2jcLhnAACvHKsAFZ0946.png

8.Encrypted Handshake Message

    验证加密算法的有效性,结合之前所有通信参数的 hash 值与其它相关信息生成一段数据,采用协商密钥 session secret 与算法进行加密,然后发送给服务器用于数据与握手验证,通过验证说明加密算法有效。

wKioL1jQ3k-hw7VqAACs4mJ3bd0249.png

9.Change_cipher_spec

    Encrypted Handshake Message通过验证之后,服务器同样发送 change_cipher_spec 以通知客户端后续的通信都采用协商的密钥与算法进行加密通信。

wKiom1jQ3tzQm6HBAACrEs4SpH4868.png

10.Encrypted Handshake Message

    同样的,服务端也会发送一个Encrypted Handshake Message供客户端验证加密算法有效性。

wKiom1jQ3yHRzr4VAACsCWGaTsA537.png

11.Application Data

    经过一大串的的计算之后,终于一切就绪,后续传输的数据可通过主密钥master key进行加密传输,加密数据查看图中的Encrypted Apploication Data字段数据,至此https的一次完整握手以及数据加密传输终于完成。

wKiom1jQ38iy7MGyAACfOvqa0dQ055.png

    https里还有很多可优化并且很多精妙的设计,例如为了防止经常进行完整的https握手影响性能,于是通过sessionid来避免同一个客户端重复完成握手,但是又由于sessionid消耗的内存性能比较大,于是又出现了new session ticket,如果客户端表明它支持Session Ticket并且服务端也支持,那么在TLS握手的最后一步服务器将包含一个“New Session Ticket”信息,其中包含了一个加密通信所需要的信息,这些数据采用一个只有服务器知道的密钥进行加密。这个Session Ticket由客户端进行存储,并可以在随后的一次会话中添加到 ClientHello消息的SessionTicket扩展中。虽然所有的会话信息都只存储在客户端上,但是由于密钥只有服务器知道,所以Session Ticket仍然是安全的,因此这不仅避免了性能消耗还保证了会话的安全性。

    最后我们可以使用openssl命令来直观的看下https握手的流程:

wKiom1jQ4GrQo1wvAAI9f1jmTzw335.png

注:相关网站建设技巧阅读请移步到建站教程频道。

(编辑:江门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读