概述
- https协议是在http协议的基础上,使用TLS协议对http数据进行了加密,使得网络通信更加安全。
- 一般情况下,使用WireShark抓取的https流量,数据都是加密的,无法直接查看。但是可以通过以下两种方法,解密抓取到的https流量数据。
方法一:通过RSA私钥解密
-
首先需要下载服务端的RSA证书私钥文件
-
在WireShark中,选择
编辑->首选项->RSA密钥
,然后添加RSA证书私钥文件。https://i-blog.csdnimg.cn/direct/66a6b62ebfa7443ba262bfb974b069d7.png" alt="在这里插入图片描述" />
-
或者选择
编辑->首选项->Protocols->TLS
, 点击RSA keys list
后面的编辑按钮,设置服务端的ip和端口,协议写http, 再导入RSA私钥文件。https://i-blog.csdnimg.cn/direct/e741d10648da42c0bed11701c978c632.png" alt="在这里插入图片描述" />
-
这样重新抓包,就可以抓到解密后的https流量。
https://i-blog.csdnimg.cn/direct/0115b9bd277b4b90a734d143a7953254.png" alt="在这里插入图片描述" />
-
这种方法只能解密密钥协商算法为RSA的加密套件,支持的常用加密套件有以下几种:
-
TLS_RSA_WITH_AES_256_GCM_SHA384TLS_RSA_WITH_AES_128_GCM_SHA256TLS_RSA_WITH_AES_256_CBC_SHA256TLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHA
-
-
并且需要拿到RSA证书私钥,可能不太实用。
方法二:使用密钥日志文件
-
https流量加密的核心是TLS协议,其握手过程会协商出会话密钥,用于加密实际传输的数据。
-
当客户端配置了密钥日志文件后,每次TLS握手完成时,会将会话密钥等信息写入指定的日志文件中,这样WireShark就可以使用日志文件中的会话密钥等信息解密HTTPS流量数据。
-
如果使用浏览器,可配置
SSLKEYLOGFILE
环境变量,指定一个日志文件路径。如果不生效,可重启下电脑。-
set SSLKEYLOGFILE=C:\sslpath\sslkeylog.txt
-
-
如果使用C/C++编写的客户端程序,可通过OpenSSL接口指定密钥日志文件
-
void keylog_callback(const SSL *ssl, const char *line) {FILE *keylog = fopen("C:\\sslpath\\sslkeylog.txt", "a");if (keylog) {fprintf(keylog, "%s\n", line);fclose(keylog);}}int main () {SSL_CTX *ctx = SSL_CTX_new(TLSv1_2_client_method());if(ctx == NULL){ERR_print_errors_fp(stderr);return -1;} SSL_CTX_set_keylog_callback(ctx, keylog_callback);return 0;}
-
-
然后在WireShark中选择
编辑->首选项->Protocols->TLS
, 在(Pre)-Master-Secret log filename
的编辑框中指定日志文件路径。https://i-blog.csdnimg.cn/direct/fd2237ad092c4de88262070584d62297.png" alt="在这里插入图片描述" />
-
再重新抓取,依然可以成功解密https流量
https://i-blog.csdnimg.cn/direct/1c18e14e94df48f485cfe757a018c4f4.png" alt="在这里插入图片描述" />
-
这种方法几乎支持所有的加密套件。
-
密钥日志文件若泄露,可解密所有记录的HTTPS流量,仅限测试环境使用。