调用AuthenticateAsClient()
时,收到错误“呼叫SSPI失败”。内部异常“收到的消息是意外的或格式错误的。”
我已经看到这是一个半流行的问题,但我找不到一个有效的解决方案。这是我在搜索文章几个小时之后的所在:
使用open ssl,我将两者组合成一个pfx:
openssl pkcs12 -in My-Client-Cert.pem -inkey ssl-client-privatekey.pem -export -out private-key-pair.pfx
对于AuthenticateAsClient()
的hostname参数,我还尝试使用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
,但不确定这是否应该引起我的注意UPDATE2: 我再次查看Wireshark并修复了解码,以便除TCP连接外还显示TLS通信。现在我可以看到握手,我可以看到实际上没有提供客户端证书。我正在向SslStream提供该证书,所以我不知道为什么它没有被传输。
答案 0 :(得分:1)
好的,最后我和Wireshark成了朋友,打破了4个咖啡杯,追逐着我的尾巴,这就是我发现的......