AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1032404
Accepted
mavi
mavi
Asked: 2020-09-03 03:30:33 +0800 CST2020-09-03 03:30:33 +0800 CST 2020-09-03 03:30:33 +0800 CST

如何使用 RSA 异步加密通过 Wireshark 解密 TLS 流量?

  • 772

我希望能够捕获和解密我的内部应用程序(我无权访问)对互联网产生的 TLS 流量。(为了测试,我正在使用 Postman 创建对安全服务器的请求。)

  1. 我所做的是添加一个 Nginx 作为反向代理。

  2. 我使用下一个命令创建了一个自签名证书:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt
    
  3. 我将 ssl 配置添加到 /etc/nginx/sites-enabled/default 文件中的证书。

    server {
    
         # SSL configuration
         #
         listen 443 ssl default_server;
         ssl_certificate /home/mavi/nginx/keys/localhost.crt;
         ssl_certificate_key /home/mavi/nginx/keys/localhost.key;
         ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
         location / {
                 # First attempt to serve request as file, then
                 # as directory, then fall back to displaying a 404.
                 #try_files $uri $uri/ =404;
                 proxy_pass https://myService.com;
                 proxy_http_version 1.1;
         }
    }
    
  4. 我在 Wireshark Edit> Preferences > SSL > RSA Keys list中添加了使用 OpenSSL 生成的密钥。

在此处输入图像描述

  1. 我创建了指向我的代理 (HTTPS://127.0.0.1) 的请求,并将请求重定向到外部服务,我得到了正确的响应。

在此处输入图像描述

  1. 我捕获了预览请求产生的流量,但 Wireshark 无法解密流量。 在此处输入图像描述

如果我使用 RSA 密钥交换,为什么我无法解密数据?

我一直在调查(如果我错了,请纠正我)异步加密的类型。我知道 RSA 将带有证书的公钥发送给客户端,然后客户端使用这个公钥来加密数据。然后当这个加密的数据被发送到服务器时,它使用私钥来解密信息。所以如果我在 Wireshark 中使用这个私钥,我应该能够解密数据,对吧?

另外,我读到为了安全起见,我们已经停止使用 RSA,现在我们转而使用 Diffie Hellman 算法(ECDH、ECDHE DFH)。Diffie Hellman 及其变体不再使用私钥,它使用保存在 RAM 中的随机会话密钥。(作为解密 Diffie Hellman 包的注释,我们需要在系统 $SSLKEYLOGFILE 中添加一个全局变量并将此文件导入 Wireshark。这仅适用于 Google Chrome、Firefox、CURL,不适用于内部应用程序)

所以我认为这就是我无法解密数据的原因。因为在我的客户端和我的服务器(都在我的本地计算机中)的密码协商中,即使我创建了 RSA 证书,也使用 Diffie Hellman 作为异步加密。我猜他们正在使用 Diffie Hellman,因为在 TLS 握手中我看到他们同意使用 0xc030 在此处输入图像描述

如果我是对的,那么我应该将我的问题更改为如何指定要在 Nginx 配置中使用的密码? 现在我的 Nginx 开启了 ssl_prefer_server_ciphers;配置。

我将添加 TLS 握手,以便您可以看到密码的协商。客户您好

在此处输入图像描述

服务器你好

在此处输入图像描述

密码重协商 在此处输入图像描述

ssl wireshark packet-sniffer ssl-certificate
  • 2 2 个回答
  • 6609 Views

2 个回答

  • Voted
  1. John Mahowald
    2020-09-03T06:42:35+08:002020-09-03T06:42:35+08:00

    带有 ECDHE-RSA-AES256-GCM-SHA384 的 TLS 1.2 具有前向保密性。请注意它出现在Mozilla 密码列表的中间级别。无法仅使用服务器密钥进行解密是一项功能。

    也提取客户端密钥。由于这会终止 nginx 上的 TLS,因此请获取 nginx 的客户端密钥。没有任何简单的选项来启用它,编译和加载你自己的钩子。例如,请参阅从 nginx 中提取 openssl pre-master secret,它使用某人的sslkeylog.c。因为 OpenSSL 的 keylog API 是已知的,所以这样的库适用于任何客户端,包括带有 OpenSSL 的 nginx。

    像往常一样,在编译第三方代码时要注意安全和操作问题。如果不需要 nginx,请考虑其他一些代理,其中键日志记录是mitmproxy之类的功能

    • 3
  2. Best Answer
    mavi
    2020-09-04T02:59:33+08:002020-09-04T02:59:33+08:00

    正如我猜测的那样,问题出在服务器和客户端同意的密码中。

    如果 RSA 密钥用于加密数据,我们只能解密 TLS/SSL 数据包数据。如果使用 Diffie-Hellman Ephemeral (DHE) 或 RSA 临时密码套件,则 RSA 密钥仅用于保护 DH 或 RSA 交换,而不是加密数据。因此,即使您拥有正确的 RSA 私钥,您也无法使用 ssldump、Wireshark 或任何其他工具解密数据。您可以通过检查持有私钥的主机发送的 Server Hello 数据包来检查正在使用哪个密码套件,如果指定的密码套件以 TLS_DHE 或 SSL_DHE 开头,您将无法解密数据。如果服务器发送 ServerKeyExchange 消息,您将无法解密数据。对于 DHE,您唯一的选择(如果可能)是修改客户端或服务器配置,以便不使用 DHE 密码套件。

    ECDHE 或 DH (Diffie-Hellman) 都创建只有 SSL 连接中涉及的实体才能访问的会话密钥。因为会话密钥没有链接到服务器的密钥对,服务器的私钥不能单独用于解密任何 SSL 会话。

    所有 TLS_RSA 密码套件都被标记为 WEAK,因为它们不提供前向保密,这意味着在 TLS_RSA 中,私钥用于解密数据:如果私钥在未来被泄露,所有记录的流量都可以使用它来解密.

    现在回答我自己的问题:如何指定要在 Nginx 配置中使用的密码?

    我必须将我的 Nginx 服务器配置为仅在 /etc/nginx/nginx.conf 文件中使用 TLS_RSA 密码

    http {
    
            ##
            # SSL Settings
            ##
    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;
            ssl_ciphers AES256-SHA256:AES256-SHA:AES128-SHA256:AES128-SHA:RC4-SHA:RC4-MD5:DES-CBC3-SHA;
    }
    

    这样我就可以解密数据。正如我们在下图中看到的,客户端和服务器同意使用 TLS_RSA_WITH_AES_256_CBC_SHA(0X0035),Wireshark 可以使用私钥解密数据。

    在此处输入图像描述

    • 1

相关问题

  • 如何使用 Tomcat 5.5 更新 SSL 证书

  • 为 IIS6 自行生成 SSL 证书?

  • plesk 上的域和子域 ssl 访问

  • 如何设置 SSL 邮件服务器?

  • 如何通过 SVN 命令行接受 SSL 证书?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve