我们已将WCF服务配置为使用客户端证书。
我们的客户端是.net 3.5 WPF应用程序。
在测试时,它与Microsoft CA和其他人生成的证书完美配合。 在使用物理令牌(Aladdin / Safenet eToken Pro 64k)进行测试时,它也能正常运行。
(首次尝试连接服务器时,会弹出“令牌登录”窗口。 成功验证令牌后,服务器请求正常工作,下一次尝试连接服务器成功,而不显示令牌登录消息)
现在,如果我们删除令牌并重新插入,当尝试连接相同的证书时,我们会收到错误“请求已中止:无法创建SSL / TLS安全通道”。 HResult 0x80131509
让它再次运行的唯一方法是重启应用程序。
使用System.Security.Cryptogragpy:
检索证书var store = new X509Store("My", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
//Getting the right certificate and then:
store.Close();
与服务器的连接使用以下代码:
string uriStr = txtUrl.Text + "/rest/auth/strong/Ping";
var client = WebRequest.Create(new Uri(uriStr)) as HttpWebRequest;
client.Method = "POST";
client.ContentType = "application/text; charset=unicode;";
client.ContentLength = 0;
client.PreAuthenticate = false;
client.KeepAlive = false;
client.ClientCertificates.Add(certificate); //Cert attached to the request
using (var res = client.GetResponse() as HttpWebResponse)
{
using (var responseStream = res.GetResponseStream())
{
using (var reader = new StreamReader(responseStream))
{
string s = reader.ReadToEnd();
ShowAndWriteToFile(s);
}
}
}
我查看了Verbose日志记录和Wireshark捕获,无法从那里找到问题。
我试过的其他东西: