1

我有一个在客户站点调用 Web 服务的程序,由于 Web 服务是由第三方提供的,它需要 SSL,我对此无能为力。

在大多数情况下,出现错误是因为存在自签名证书,因此我正在检查 X509Chain.ChainElements.ChainElementStatus 是否存在 UntrustedRoot 错误并忽略它。

这一切都很好,但是我从一个新客户端收到一个错误,并且 ChainElementStatus 元素似乎是一个空数组。关于可能导致这种情况的任何想法?如果我查看 IE 中的证书错误,它只是说证书不是由受信任的 CA 颁发的。

编辑:按照 Markus 的建议添加跟踪,我看到返回以下错误:

DateTime=2009-12-21T21:58:29.8719648Z

System.Net 信息:0:[0772] SecureChannel#57280435 - 远程证书有错误:ProcessId=4964 DateTime=2009-12-21T21:59:15.3239262Z System.Net 信息:0:[0772] SecureChannel#57280435 - 内部发生证书链接错误。

ProcessId=4964
DateTime=2009-12-21T21:59:15.3239262Z

System.Net 信息:0:[0772] SecureChannel#57280435 - 远程证书已被用户验证为无效。进程 ID=4964

4

1 回答 1

2

您是否尝试过添加更多日志记录?这让我摆脱了过去的几个相关错误(我曾经花费的时间比我在意调试证书相关问题的时间要多,只是意识到有人将时钟调到了我的证书不再有效的时间) .

在阅读了 Jeff P Sanders关于调试证书相关错误过程的精彩博客文章后,我终于设法找到了问题所在。它是为 asp.net 客户端编写的,但它同样适用于常规 .net 客户端。

它的核心是在 (App|Web).Config 文件中添加几个跟踪侦听器。您可能最感兴趣的是 System.Net 和 System.Net.Sockets 的跟踪器。

<configuration>
<system.diagnostics>
    <trace autoflush="true" />
    <sources>
        <source name="System.Net">
            <listeners><add name="System.Net"/></listeners>
        </source>
        <source name="System.Net.Sockets">
            <listeners><add name="System.Net"/></listeners>
        </source>
    </sources>
    <sharedListeners>
        <add
             name="System.Net"
             type="System.Diagnostics.TextWriterTraceListener"
             initializeData="System.Net.trace.log"
             traceOutputOptions = "ProcessId, DateTime"
         />
    </sharedListeners>
    <switches>
        <add name="System.Net" value="Verbose" />
        <add name="System.Net.Sockets" value="Verbose" />
    </switches>
</system.diagnostics>
</configuration>

试一试,如果它不能解决您的问题,您至少应该有足够的数据来更新您的问题并提供更多信息。

于 2009-12-21T21:50:01.337 回答