我们有一个.Net 4.6.1服务,它使用HttpWebRequest向另一个Web服务发送HTTPS请求。我们正在尝试捕获此请求遇到的问题,以便我们可以将数据日志发送给外部服务的所有者。我们有请求/响应的 Wireshark 跟踪,但无法解密它。远程服务是Java,但这并不重要。
我们发现这个非常翔实的帖子,但它通过浏览器引用HTTP。https://security.stackexchange.com/questions/35639/decrypting-tls-in-wireshark-when-using-dhe-rsa-ciphersuites/42350#42350
有没有办法获取系统上使用的私有 RSA 密钥来解码请求?这不适用于 HTTPS 响应,对吗?生成 SSL 键盘日志文件可以解决此问题吗?如果是这样,我们可以修改代码来生成文件吗?其他解决方案?谢谢
我想到了一个解决方法,只要您的网络基础设施允许它。
- 重新配置客户端应用以通过 HTTP(而不是 HTTPS(调用远程服务器
- 放置代理并将客户端配置为通过代理发送。
- 将代理配置为通过 HTTPS 转发(并输出到远程服务器(
- 使用Wireshark捕获客户端和代理之间的请求。
您将同时收到请求和响应。 请求应该或多或少是prestine形式,响应可能会有几个来自代理的额外标头(如Via:
(,但不应阻止您的故障排除。
为应用程序启用系统日志记录可能会有所帮助。您可以设置应用程序配置文件以打开此功能并写入文件。日志将未加密,它们将显示请求/响应以及更多内容。
下面是一个示例,将其命名为 [app name].exe.config,并将其放在与.exe相同的目录中
<configuration>
<system.diagnostics>
<trace autoflush="true"/>
<sources>
<source name="System.Net" maxdatasize="10240">
<listeners>
<add name="TraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets" maxdatasize="10240">
<listeners>
<add name="TraceFile"/>
<!--
Commented this out because it can cause the program to slow down when running from the command line and console output is enabled
<add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>
-->
</listeners>
</source>
</sources>
<sharedListeners>
<add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log"/>
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose"/>
<add name="System.Net.Sockets" value="Verbose"/>
</switches>
</system.diagnostics>
</configuration>
您可能希望取出 System.Net 跟踪并仅记录System.Net.Sockets