在处理证书时发生未知错误

本文关键字:未知 错误 处理 证书 | 更新日期: 2023-09-27 18:19:17

我正在尝试使用SslStream和TLS 1.2协议建立到远程服务器的TCP连接。代码如下:

_tcpClient.Connect(endPoint);
var certificate = new X509Certificate2(_settings.CertificateFilePath, _settings.CertificatePassword, X509KeyStorageFlags.MachineKeySet);
var certificates = new X509CertificateCollection { certificate };
_nStream = _tcpClient.GetStream();
_sslStream = new SslStream(_nStream, false,
    (o, x509Certificate, chain, errors) => true,
    (o, s, collection, x509Certificate, issuers) =>
    { return collection[0]; }
);
_sslStream.AuthenticateAsClient(_settings.HostIpAddress, certificates, SslProtocols.Tls12, true);
_sslStream.Write(someData, 0, someData.Length);

然而,我得到一个异常:

System.Security.Authentication。AuthenticationException:对SSPI的调用失败,参见内部异常。--->System.ComponentModel。Win32Exception:出现未知错误处理证书

——内部异常堆栈跟踪结束

在System.Net.Security.SslState

。CheckThrow(布尔authSucessCheck)在System.Net.Security.SslStream。Write(Byte[] buffer, Int32 offset, Int32 count)

我启用了通道日志记录,在Windows事件日志中发现:

远程服务器已请求SSL客户端身份验证,但没有可以找到合适的客户端证书。匿名连接

然后我启用了System。Net日志记录,并获得此日志(我从其中删除了一些证书数据)。看起来客户端证书是可以的,但由于某种原因,日志显示为Remote certificate: null,尽管显然有一些数据从远程服务器发回,看起来非常像证书。在最后的日志上写着returned code=CertUnknown。我不知道问题可能在哪里(远程服务器证书?我的代码吗?远程/本地服务器设置?),并将感谢任何帮助。

注意:如果我通过指定SslProtocols.Ssl3而不是SslProtocols.Tls12来更改代码以使用SSL 3,一切都可以正常工作。但我确实需要使用TLS,因为这是远程服务器所有者要求的。

在处理证书时发生未知错误

我们让websockets服务器使用TLS 1.2。

手动添加"ws.SslConfiguration。EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;已解决