我们有一个.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 keylog文件会解决这个问题吗?如果是这样,我们可以修改我们的代码来生成文件吗? 其他方案?感谢
答案 0 :(得分:1)
为应用程序打开系统日志可能会有所帮助。您可以设置应用程序配置文件以将其打开并写入文件。日志将不被加密,并且将显示请求/响应以及更多信息。
这里是一个示例,将其命名为[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
答案 1 :(得分:0)
我想到了一种解决方案,只要您的网络基础设施允许它。
您将同时拥有请求和回复。请求应该是或多或少的prestine形式,响应可能会有几个来自代理的额外标头(如Via:
),但不应该阻止您的故障排除。