.net - 具有 peertrust 和自签名客户端证书的 WCF 传输安全性

标签 .net wcf certificate self-signed

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

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

服务的一些相关配置位:

<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>

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

我期待我能够使用自签名证书,将它们存储在“受信任的人”存储中,并且一切正常。但似乎有一些额外的验证正在进行,我错过了什么吗?有没有更好的办法?

最佳答案

我遇到了同样的问题,其中我的自签名客户端证书将被验证,即使它不在“受信任的人”存储中,尽管“PeerTrust”的验证模式。通过使用以下服务行为,我终于能够将服务限制为仅接受特定的客户端证书:

<behaviors>
   <serviceBehaviors>
      <behavior ...>
      ...
         <serviceCredentials>
            <clientCertificate>
               <authentication certificateValidationMode="PeerTrust"
                               revocationMode="NoCheck" 
                               trustedStoreLocation="LocalMachine" />
               <certificate findValue="NameOfClientCertificate"
                            x509FindType="FindBySubjectName"
                            storeLocation="LocalMachine"
                            storeName="TrustedPeople" />
            </clientCertificate>
         </serviceCredentials>
         ...
      </behavior>
      ...

身份验证元素和证书元素都需要指向正确的存储,在本例中为“LocalMachine”。

关于.net - 具有 peertrust 和自签名客户端证书的 WCF 传输安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3229558/

相关文章:

.net - 如何让 SoapUI 使用 ws-security 模式 'TransportWithMessageCredential'

ssl - ECDSA 证书可以有 RSA 签名吗?

Glassfish 3.1.2 配置相互认证的客户端证书

C# 我应该阻止一个事件被两次取消 Hook 吗?

.net - PowerShell -match 运算符和多个组

.net - WCF maxConnections 属性

.net - 带有 WCF 的 JSON-P 示例?

.NET Core Azure WebJobs 不从 Azure 应用程序设置读取

.net - 为什么 F# 不为 operator== 提供自定义重载?

iPhone:如何/是否将我现有的私钥包含在新证书中?