美文网首页
HTTP与HTTPS

HTTP与HTTPS

作者: 明明你也一样 | 来源:发表于2019-06-02 22:53 被阅读0次

    0x00 HTTPS

    在传统流行的 web 服务中,由于http协议没有对数据包进行加密,导致http协议下的网络包是明文传输,所以只要攻击者拦截到http协议下的数据包,就能直接窥探这些网络包的数据。

    HTTPS(HTTP Secure 或 HTTP over SSL) 协议就是来解决这个问题的,简而言之,HTTPS协议在应用层的http协议和以及传输层TCP协议之间的会话层加入了 SSL/TLS协议,用作加密数据包。会话层的这个加密协议,在真正数据传输之前,进行握手通信,握手的信息交换主要包括:双方确认加密协议的版本,确认身份(其中浏览器客户端的身份有时是不需要确认的),确认传输真正数据的加密密码(对称加密)。随着技术的发展,TLS 得到了广泛的应用,关于 SSL 与 TLS 的差别,我们不用在意,只要知道 TLS 是 SSL 的升级版本就好。

    在用作信息传输的加密密码确认之后,接下来的通信数据都会加密后再传输,从而达到防窃取的作用。

    0x01 HTTPS 协议降级

    那么使用了https就能确保安全传输了吗?

    可以说理想上是的,现实却不是。

    原因简单来说就是:设计和实现SSL/TLS协议出现了漏洞,导致攻击者同样可以攻击一些旧版本的SSL/TLS协议。当SSL/TLS加密协议漏洞爆出来之后,最新版本的SSL/TLS协议修复了已知漏洞,但旧版本的加密协议却变得不安全了。

    那么什么又是“HTTPS协议降级”?

    在上一小节提到了SSL/TLS协议通过握手来确定通信信息,其中握手双方要统一加密协议版本。

    在握手过程中这样确认加密协议版本:

    由客户端(如浏览器)发送第一个数据包 ClientHello,这个数据包中保存着客户端支持的加密协议版本。
    服务器收到这个ClientHello数据包,查看里面客户端支持的加密协议版本,然后匹配服务器自己支持的加密协议版本,从而确认双方应该用的加密协议版本。
    服务器发送ServerHello数据包给客户端,告诉客户端要使用什么加密协议版本。
    在上述过程中,如果客户端发送给服务器的ClientHello数据包中说自己仅支持某个有漏洞的旧版本加密协议(比如仅支持SSLv3.0),服务器有两种可能:

    1. 服务器支持很多版本,其中包括有漏洞的旧版本和新版本(包括了SSLv3.0协议),那么服务器会认可使用有漏洞的旧版本协议,从而告诉客户端使用有漏洞的旧版本(可以使用SSLv3.0)。
    2. 服务器不支持有漏洞的旧版本,拒绝客户端的这次请求,握手失败。
      对于攻击者,作为中间人只能监听到加密过的数据,如果这些数据通过没有漏洞的加密版本加密,攻击者并不能做什么。

    但是,如果服务器提供有漏洞的旧版本加密协议的支持,而同时攻击者又能作为中间人控制被攻击者的浏览器发起漏洞版本的HTTPS请求,那虽然攻击者监听到的也是加密过的数据,但因为加密协议有漏洞,可以解密这些数据,所以数据就和明文传输没有什么差别了。

    这就是HTTPS协议降级。

    相关文章

      网友评论

          本文标题:HTTP与HTTPS

          本文链接:https://www.haomeiwen.com/subject/gmyfxctx.html