一、SSL/TLS原理简介
  • SSL(Secure Sockets Layer 安全套接层),及其继任者TLS(Transport Layer Security 传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
  • 它包括协商层(SSL Handshake)和记录层(SSL Record)两个部分。协商层包括沟通通信使用的SSL版本、信息加密用的算法、所使用的公钥算法,并要求对公钥方式对客户端进行身份认证。记录层对应用程序提供的信息进行分段、压缩、数据认证和加密,能够保障数据的机密性和报文的完整性。

HTTP协议

SSL握手协议

SSL改变密码协议

SSL告警协议

应用数据(HTTP)

SSL记录协议

TCP

IP

二、服务器端抓包私钥解密

第一种情况(可解密):

Client直接通过Server公钥加密对称密钥,发送给Server,不使用Diffie-Hellman加密算法协商对称密钥。实验环境:Server:192.168.110.140    Client:192.168.110.129,实验文件下载链接。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_SSL


上图过程:

Client------Client Hello------>Server

Client<------Server Hello,Certificate,Server hello done------Server

Client–Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message->Server

Client<------Change Cipher Spec------Server

Client<------Encrypted Handshake Message------Server在第二次握手Client<-----Server Hello,Certificate,Server hello done----Server过程中,Server选择了Cipher Suite:TLS_RSA_WITH_RC4_128_MD5的加密套件来协商对称密钥。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_SSL_02

在第三次握手Client------Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message----->Server中,Client使用TLS_RSA_WITH_RC4_128_MD5加密套件的算法,通过RSA加密将私钥加密后发送给了Server,实现了Client Key Exchange

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_Server_03


鉴于上面的情况,由于对称密钥通过RSA加密后在网络中进行了传输,当我们获得了Server的私钥后,将私钥导入到wireshark的ssl配置后,https加密数据报文就会被解密。操作步骤:edit–>Preferences–>Protocols–>SSL–>RSA keys list Edit,导入私钥。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_Server_04


下图得到解密的报文,这种情况下,当Server私钥丢失时,报文将面临被解密的风险,因此现在的openssl版本像TLS_RSA_WITH_RC4_128_MD5这样的加密套件已经很少使用了。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_数据_05


第二种情况(不可解密):

Server与Client通过Diffie-Hellman这类密钥交换算法生成对称密钥,对称密钥不通过RSA加密传输。实验环境:Server:192.168.0.103    Clinet:192.168.0.144

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_SSL_06


上图过程:

Client------Client Hello------>Server

Client<------Server Hello,Certificate,Server Key Exchange,Server hello done------Server

Client–Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message->Server

Client<—New Session Ticket,Change Ciper Spec,Encrypted Handshake Message—Server在第二次握手Client<-----Server Hello,Certificate,Server hello done----Server过程中,Server选择了Cipher Suite:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384的加密套件来协商对称密钥。同时,在Server Key Exchange下面可以看到Diffie-Hellman Server Params,证明该算法使用DH协商生成对称密钥。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_SSL_07


由于密钥协商使用了DCDHE算法,它属于DH类密钥交换算法,私钥不参与密钥的协商,故即时私钥泄漏,客户端和服务端之间的报文都无法被解密,因此无法通过导入私钥解密https流量,这叫前向安全(forward secrity)。相关类似的算法还有DHE算法,DHE下,server key exchange 如下图,可以看到DH使用的两个参数p和g。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_SSL_08

三、客户端抓包对称密钥解密

这种情况网上文章较多,原理是某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,可供 Wireshark 加密使用。具体步骤:

1、配置环境变量,SSLKEYLOGFILE C:\ssl_key\sslog.log。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_SSL_09


2、配置Wireshark 设置文件路径,某些版本中为SSL配置。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_数据_10


3、重启浏览器,至此可以看到解密的https报文。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_数据_11


4、此时,再看一下C:\ssl_key\sslog.log文件中的内容,发现其保存的正是对称密钥的密钥随机数,且经常在发生着改变。

利用wireshark和openssl 进行解密和 优化 wireshark解ssh_SSL_12