将客户端证书从智能卡/ etoken连接到WCF服务时出错

时间:2013-09-30 12:09:45

标签: c# wcf ssl smartcard client-certificates

我们已将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捕获,无法从那里找到问题。

我试过的其他东西:

  1. 清除密码缓存 - 在删除令牌之前清除它时,然后在下次尝试连接到服务器时,弹出“令牌登录”窗口。 删除并重新插入后清除它并没有改变任何内容。
  2. 重新启动WCF服务 - 重新插入令牌后,结果仍然相同。
  3. 检查令牌删除和重新插入之前和之后证书上的其他操作的行为方式。 例如,如果我在删除并重新插入令牌后签署并验证带有证书的某些消息,则会再次弹出“令牌登录”窗口并继续工作。
  4. 尝试连接存放在商店中的自创证书 - 工作,然后从商店中删除并重新添加 - 仍然有效。

0 个答案:

没有答案