在UWP应用程序中,我可以设置以下类似内容以在将StreamSocket连接到启用SSL的主机时启用自签名证书:

streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.InvalidName);
streamSocket.Control.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
await streamSocket.ConnectAsync(new HostName("localhost"), "993", SocketProtectionLevel.Tls12);


但是,我希望该应用程序能够检查在连接期间实际发生了哪些错误。我以为我会用这个:

streamSocket.Information.ServerCertificateErrors


但是,此集合在我的测试中为空。仅当streamSocket.Control.IgnorableServerCertificateErrors为空并且因此异常终止连接时填充该字段。我想建立连接(即忽略SSL错误),但仍然记录这些错误并将其提供给应用程序使用(就像我之前使用SslStream和.NET Framework所做的那样)。可能吗?

最佳答案

我认为,如果我们在运行ChainValidationResult.InvalidName方法之前将ChainValidationResult.UntrustedStreamSocketControl.IgnorableServerCertificateErrors添加到StreamSocket.ConnectAsync,它将忽略SSL服务器错误。无法在ChainValidationResult中获得任何StreamSocketInformation.ServerCertificateErrors

我们应该能够使用StreamSocket.ConnectAsync方法而无需添加ChainValidationResult.InvalidNameChainValidationResult.Untrusted

有关StreamSocket的官方示例,请参考Certificates in Scenario5

我们应该能够使用try-catch来捕获StreamSocket.ConnectAsync方法的异常。然后,我们可以在ChainValidationResult中获得StreamSocketInformation.ServerCertificateErrors,并且可以将ChainValidationResult添加到StreamSocketControl.IgnorableServerCertificateErrors中。同样,我们应该能够再次使用StreamSocket.ConnectAsync

09-06 00:55