如何使用Wireshark解密从C#HTTP客户端发送的HTTPS消息?

时间:2017-05-17 21:04:58

标签: c# https wireshark

我们有一个.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文件会解决这个问题吗?如果是这样,我们可以修改我们的代码来生成文件吗? 其他方案?感谢

2 个答案:

答案 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)

我想到了一种解决方案,只要您的网络基础设施允许它。

  1. 重新配置您的客户端应用程序以通过HTTP(而不是HTTPS)调用远程服务器
  2. 设置代理并将客户端配置为通过代理发送。
  3. 将代理配置为通过HTTPS转发(并转发到远程服务器)
  4. 使用Wireshark捕获客户端和代理之间的请求。
  5. 您将同时拥有请求和回复。请求应该是或多或少的prestine形式,响应可能会有几个来自代理的额外标头(如Via:),但不应该阻止您的故障排除。