在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.Untrusted
和StreamSocketControl.IgnorableServerCertificateErrors
添加到StreamSocket.ConnectAsync
,它将忽略SSL服务器错误。无法在ChainValidationResult
中获得任何StreamSocketInformation.ServerCertificateErrors
。
我们应该能够使用StreamSocket.ConnectAsync
方法而无需添加ChainValidationResult.InvalidName
和ChainValidationResult.Untrusted
。
有关StreamSocket的官方示例,请参考Certificates in Scenario5。
我们应该能够使用try-catch来捕获StreamSocket.ConnectAsync
方法的异常。然后,我们可以在ChainValidationResult
中获得StreamSocketInformation.ServerCertificateErrors
,并且可以将ChainValidationResult
添加到StreamSocketControl.IgnorableServerCertificateErrors
中。同样,我们应该能够再次使用StreamSocket.ConnectAsync
。