从WCF服务访问客户端证书属性

时间:2011-02-14 11:58:40

标签: wcf iis certificate

我正在编写一个WCF服务,我需要访问用于连接服务的客户端证书的哈希代码。

我正在寻找一个类似于ASP.NET 2.0天的Request.ClientCertificate的属性或方法,但找不到任何允许轻松访问客户端证书的内容。

我们的服务设置为使用basicHttpBinding和“Transport”安全模式运行SSL。

IIS已设置为“需要SSL并接受证书”。

需要注意的一点是,我们用于保护端点的服务器证书来自与客户端证书不同的CA.客户端证书只能通过自定义代码进行验证(因此需要获取哈希码连接证书。)

我已经创建了IDispatchMessageInspector的自定义实现,以查看是否可以从那里访问客户端证书,但无济于事。

有没有人尝过这个并且之前有过成功?

2 个答案:

答案 0 :(得分:4)

看起来您最好的选择是为您的服务实现自定义证书验证器。这基本上是一个派生自X509CertificateValidator的类,然后通过配置文件registered

有关如何在this article上执行此操作的更完整信息。

答案 1 :(得分:2)

如果有其他人尝试应用客户端证书身份验证,则需要执行以下步骤以使其工作(我们在WCF中为此实例使用basicHttpBinding并在IIS的本地实例中运行):

  1. 将IIS设置为对站点使用HTTPS绑定,并使用服务器证书在IIS中将其保护
  2. 在IIS中,将您网站的SSL设置更改为需要SSL并要求客户端证书(必须是要求 - 接受不起作用)
  3. 在WCF配置中修改basicHttpBinding并将安全模式设置为“Transport”,将clientCredentialType设置为“Certificate”
  4. 确保根证书(用于创建任何客户端证书的证书)位于运行IIS的本地计算机的“受信任的根证书颁发机构”中。

    注意如果您在开发环境中可能需要生成自己的根证书,那么makecert命令行应用程序对此非常有用;只需运行以下命令: makecert -n“CN = My Test Auth”-r -cy authority -a sha1 -sv“My Private Key.pvk”TestAuth.cer

    这将创建一个名为TestAuth.cer的证书(需要将其添加到计算机的“受信任的根证书颁发机构”)和一个名为“My Private Key.pvk”的私钥文件。

    现在要生成客户端证书,您可以运行以下命令: makecert -a sha1 -n“CN = myConnectionCert”-ic“TestAuth.cer”-iv“My Private Key.pvk”-ss My

    这创建了一个myConnectionCert主题的证书并将其添加到您的个人证书存储区 - 当您现在访问该站点时(例如,查看服务页面)IE应该提示您选择证书 - 选择您拥有的证书刚刚创建,您应该正常看到服务页面。

相关问题