gpt4 book ai didi

c# - 连接到 OpenSSL 服务器时为 "Call to SSPI failed"

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:17 26 4
gpt4 key购买 nike

调用 AuthenticateAsClient() 时,我收到错误“调用 SSPI 失败”。内部异常“收到的消息是意外的或格式错误”。

我发现这是一个不太受欢迎的问题,但我一直没能找到可行的解决方案。这是我搜索文章几个小时后所处的位置:

  • 使用我的私钥,服务器向我颁发了签名的客户端证书
  • 使用 open ssl,我将两者组合成一个 pfx,使用:

    openssl pkcs12 -in My-Client-Cert.pem -inkey ssl-client-privatekey.pem -export -out private-key-pair.pfx

  • 我将证书导入到 LocalMachine 上的个人文件夹中。我能够看到该证书识别出私钥存在
  • 私钥不受密码保护
  • 我将与我交谈的服务的 CA 根导入到我的受信任的根证书颁发机构和个人商店中。
  • 在应用程序代码中,我通过缩略图提取证书。我可以在调试器中看到私钥和公钥都存在。
  • 我初始化一个 TcpClient
  • 然后我使用 TcpClient 初始化一个 SslStream
  • 我调用 AuthenticateAsClient()
  • 我收到了错误信息

对于 AuthenticateAsClient() 的主机名参数,我还尝试使用 CA 根的 CN 以及客户端证书的 CN,结果相同。

当我使用 openssl s_client connect 连接到它时,我验证了我尝试与之交谈的服务工作正常

这里是连接的代码:

private void Setup(string hostname, int port, X509Certificate2Collection certs)
{
try
{
// create the socket
var clientSocket = new TcpClient(hostname, port);
_sslStream = new SslStream(
clientSocket.GetStream(),
false,
ValidateServerCertificate,
null);

_sslStream.AuthenticateAsClient(
"VirtuCrypt Root CA - Test", // hostname here must match the name on the server certificate
certs,
SslProtocols.Tls11,
false);

Debug.WriteLine("Connected!");
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);

if(ex.InnerException != null)
Debug.WriteLine(ex.InnerException.Message);
}
}

拔掉我的头发……有什么想法吗?

更新:我启动 Wireshark 并注意到与主机之间的所有通信都是通过 TCP 完成的,没有一个是通过 TLS 完成的。不确定这是否是我应该关心的事情,尽管我正在请求 TLS12

更新 2:我再次查看 Wireshark 并修复了解码,以便它除了显示 TCP 连接外还显示 TLS 通信。现在我可以看到握手,我可以看到实际上没有提供客户端证书。我正在向 SslStream 提供该证书,所以我不知道为什么它没有被传输。

最佳答案

好吧,在终于与 Wireshark 成为 friend 并打破了大约 4 个咖啡杯追逐我的尾部之后,这就是我发现的...

  • 提供给我们的 CA 根是一个 pem 文件,实际上包含 CA 根和 3 个中间证书。
  • 我不得不将它们分解成单独的文件,并将 CA 根导入到我们受信任的根 CA 存储中,并将 3 个中间证书导入到中间 CA 存储中
  • 我之前没有注意到,但我们安装在个人商店中的客户端证书说它没有足够的信息来验证,但真正发生的是它没有通过验证,因为我们没有没有如上所述正确安装 CA 证书。一旦我分别安装了它们,这条消息就消失了
  • 看来 .Net 不会发送您的客户端证书,除非它可以被验证。在我对 OP 的第二次编辑中,我提到我可以看到根本没有发送客户端证书。 这才是真正的问题。安装这些 CA 证书后,证书开始发送,其他一切都很好。

关于c# - 连接到 OpenSSL 服务器时为 "Call to SSPI failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35444609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com