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



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

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

  1. 重新配置客户端应用以通过 HTTP(而不是 HTTPS(调用远程服务器
  2. 放置代理并将客户端配置为通过代理发送。
  3. 将代理配置为通过 HTTPS 转发(并输出到远程服务器(
  4. 使用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

相关内容

最新更新