通过对等信任和自签名客户端证书实现 WCF 传输安全

Gin*_*nji 5 .net wcf certificate self-signed

我已经在 WCF 上挣扎了一段时间,但我似乎无法弄清楚。我有一个启用了 SSL 的自托管 WCF 服务(使用来自自签名根 CA 的签名证书),到目前为止一切顺利。该服务用于企业对企业的通信,因此证书似乎是最好的解决方案。

(我目前正在使用 WS 绑定,但这仅用于开发目的,因为所有绑定方法都支持(据我所知)客户端证书的传输级安全性。)

该服务的一些相关配置位:

<bindings>
  <wsHttpBinding>
    <binding name="wsHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="Certificate"/>
      </security>
    </binding>
  </wsHttpBinding>
</bindings>

<!-- snip -->

<serviceCredentials>
  <clientCertificate>
     <authentication certificateValidationMode="PeerTrust" trustedStoreLocation="CurrentUser" />
  </clientCertificate>
</serviceCredentials>
Run Code Online (Sandbox Code Playgroud)

当我让客户端使用位于运行 WCF 服务的用户的“受信任的人”存储中的自签名证书时,它会失败。当我使用由我自己的根 CA 签名的证书时,即使它不在“受信任的人”存储中,它也可以工作。

我期望我能够使用自签名证书,将它们存储在“受信任的人”存储中,一切都会正常进行。但似乎正在进行一些额外的验证,我是否缺少某些东西?有没有更好的办法?

Gin*_*nji 0

是的,传输安全和证书验证是在 WCF 无法控制的较低级别上处理的。因此,所有这些带有自定义验证器等的奇特事物都不适用于传输安全性,仅适用于消息安全性。要限制客户端访问,同时仍仅使用传输安全性,您需要设置 CTL(证书信任列表)。以下网站应该会给您一些指导。

http://www.leastprivilege.com/CertificateBasedAuthenticationAndWCFTransportSecurity.aspx http://viisual.net/configuration/IIS7-CTLs.htm