我希望能够捕获和解密我的内部应用程序(我无权访问)对互联网产生的 TLS 流量。(为了测试,我正在使用 Postman 创建对安全服务器的请求。)
我所做的是添加一个 Nginx 作为反向代理。
我使用下一个命令创建了一个自签名证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt
我将 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; } }
我在 Wireshark Edit> Preferences > SSL > RSA Keys list中添加了使用 OpenSSL 生成的密钥。
- 我创建了指向我的代理 (HTTPS://127.0.0.1) 的请求,并将请求重定向到外部服务,我得到了正确的响应。
如果我使用 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 握手,以便您可以看到密码的协商。客户您好
服务器你好