zoukankan      html  css  js  c++  java
  • HTTPS协议分析

    实验目的

    1、https的基本概念和工作流程####

    2、学会捕获https封包

    3、学会筛选重要的https封包

    4、学会解密https数据包

    实验工具

    wireshark

    实验环境

    操作机:Windows XP

    实验步骤

    HTTPS的工作流程

    使用HTTPS协议工作时,服务端和客户端的信息传输都会进行加密,所以传输的数据都是加密后的数据。HTTPS的工作流程如下:

    1、客户端使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。
    2、Web服务器收到客户端的请求后,会将网站包含有公钥的证书信息传送一份给客户端。
    3、客户端浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
    4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
    5、Web服务器利用自己的私钥解密出会话密钥。
    6、Web服务器利用会话密钥加密与客户端之间的通信。

    HTTPS数据包的捕获

    由于HTTPS是建立在TCP协议之上的,所以我们在捕获之前,可以设置筛选器为TCP。开始捕获后,可以通过登录QQ邮箱的方式,捕获到含有HTTPS协议的数据包。如下图所示:

    在这个界面的Info列中,可以看到这些数据包都是使用HTTPS协议传输的。而在Protocol列中,可以看到SSLTCP以及TLSv1.1等协议。其中的TLS(Transport Layer Security)其实是SSL的升级版,是为网络通信提供安全及数据完整性的一种安全协议。二者都是在传输层对网络连接进行加密的。
    为了便于进一步的分析,这里我们通过着色后提取数据包的方式,将我们需要的数据包提取出来,这里不再赘述(自行学习wireshark的使用)。

    HTTPS数据包的分析

    经过提取后的文件进行分析:

    首先可以发现1到3号数据包是TCP连接建立时的三次握手的过程。接下来从第4个数据包开始,其实就是SSL握手过程中所产生的数据包,也就是使用HTTPS协议加密的信息。
    对于第4个数据包,包含有客户端向服务器发送的Client Hello信息,以便开始一个新的加密会话连接。展开SSL区段,可以看到客户端支持的TLS的版本(Version);生成的随机数(Random,以便用于生成对话密钥);Cipher Suites的值是15,说明支持15种加密算法;支持的压缩方式(Compression)以及一些扩展(Extension)等:

    当服务器收到客户端的请求后,就会向客户端发出响应,也就是Server Hello。对于我们这个捕获文件而言,第6个数据包就是服务器发送给客户端的确认信息,告诉客户端请求已经收到:

    展开SSL数据段,可以看到服务器支持的TLS版本为1.1。也可以看到服务器生成的随机数,用于生成对话密钥。下面还有加密套件信息,这里的加密套件表示使用RSA公钥算法来验证证书以及交换密钥,用AES加密算法对数据进行加密,使用SHA算法来校验消息内容。
    客户端收到服务器的响应后,首先验证服务器的证书。如果证书不是由可信任的机构颁发的,或者证书中的域名与实际域名不一致,或者证书已过期,就会向访问者显示一个警告,由访问者选择是否还要继续通信。如果证书没有问题,客户端就会从证书中取出服务器的公钥。然后,向服务器发送一些信息,包括用服务器公钥加密的随机数编码改变通知客户端握手结束通知等。服务器发送给客户端的数据包,如下图所示:

    在Certificate区段中,保存有证书的详细信息。可以看到请求的网站、组织名、地区名、省名以及国家等的信息。紧接下来的signedCertificate是签名证书信息。“签名”的作用就在于,客户端(浏览器)在确定是否要信任一个网站时,就是通过证书判断的。所以每个证书上必须要有一份“签名”。最后一行Length的值为0,表示告诉客户端“Hello”过程已经完成,也就意味着服务器将不验证客户端的证书。
    在客户端收到并验证服务器响应的证书后,将会把生成的密钥传给服务器,如下图所示:

    在Client Key Exchange中,我们可以看到TLS的类型、版本、长度、握手协议、握手类型、长度、密钥交换算法客户端参数、公钥长度以及加密公钥等信息。而在其它的两个记录中,也有着类似的结构。
    经过以上几个阶段,整个握手过程也就结束了。接下来客户端与服务器进入加密通信的阶段,就完全是使用普通的HTTP协议,但是会使用会话密钥来加密内容。用户可以发送通过TLS层使用RC4加密的HTTP的消息,也可以解密服务端发送来的由RC4加密的消息。此外还会通过哈希算法来验证消息是否被篡改。
    在应用层,客户端向服务器发送的信息为:

    可见,发送的数据都经过了加密处理。服务器响应客户端的信息,如下图所示:

    可以看到,这也是使用了SSL进行加密。

    了解HTTPS数据包的解密

    HTTPS的数据包并不是绝对安全的,在一定的条件下也可以实现解密的操作,这里我们分析以下实验文件:

    可以看到,这里的数据包使用了SSLv3进行加密。为了实现解密,我们需要.key文件。之后在Wireshark中选择菜单栏的“Edit”->”Preferences”->”Protocols”->”SSL”->”RSA keys list”->”Edit”->”New”,之后进行如下填写:

    之后点击OK,就可以实现解码了:

    现在已经可以看到GET方法等信息。尽管我们对捕获文件进行了解码操作,但是并不意味着HTTPS不安全。因为解码所需要使用的密钥只能在服务器导出,不同的服务器的情况并不一样,因此想要破解HTTPS的数据包,是需要满足很多的条件的。

    参考资料

    【1】https://www.ichunqiu.com/course/51451
    【2】谢希仁. 计算机网络.第5版[M]. 电子工业出版社, 2008.

  • 相关阅读:
    iOS 宏(define)与常量(const)的正确使用
    Android中全屏 取消标题栏,TabHost中设置NoTitleBar的三种方法(转)
    如何在 GitHub 建立个人主页和项目演示页面
    Git 使用指南(cmd + gui)
    Google C++ 编码规范(中文版)
    SVN服务器搭建和使用
    演化理解 Android 异步加载图片(转)
    Android之断点续传下载(转)
    Android学习笔记——关于onConfigurationChanged(转)
    (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
  • 原文地址:https://www.cnblogs.com/Erma/p/10322963.html
Copyright © 2011-2022 走看看