在WCF中使用NetTcpBinding在自托管服务中配置传输安全性的例外情况

时间:2015-05-04 11:28:12

标签: c# wcf security ssl

这是服务方面的配置:

<endpoint binding="netTcpBinding" bindingConfiguration="TcpBinding" contract="a"></endpoint>
<binding name="TcpBinding">
  <security mode="Transport">
    <transport protectionLevel="EncryptAndSign" clientCredentialType="None">
    </transport>
  </security>
  <reliableSession enabled="false"/>
</binding>

<serviceBehaviors>
<behavior>
  <serviceCredentials>
    <serviceCertificate  storeName="My" storeLocation="LocalMachine" findValue="73 b9 d8 98 8d b6 54 bf fb ff 21 0b ac fc 04 19 37 16 71 5f" x509FindType="FindByThumbprint" />
  </serviceCredentials>
  <serviceMetadata httpGetEnabled="false"/>
  <serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>

我在此链接后创建了自签名证书: https://msdn.microsoft.com/en-us/library/ff648498.aspx

首先,我创建了一个证书,我在受信任的根证书颁发机构中作为根证书颁发机构安装 - 名为“RootCA”。然后,我创建了另一个用这个'RootCA'签名的自签名证书,该证书发给了'localhost'。

在客户端,我使用与服务端相同的配置元素。在打开代理时,我收到以下异常:

  

System.ServiceModel.Security.SecurityNegotiationException X.509   证书CN = localhost链构建失败。证书即   使用的信任链无法验证。更换   证书或更改certificateValidationMode。撤销   函数无法检查证书的撤销。

还有什么需要让它运行?

1 个答案:

答案 0 :(得分:1)

include this in your client side in endpoint behaviours

    <endpointBehaviors>
          <behavior name="clientBehave">
            <clientCredentials>
               <serviceCertificate>              
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck"/>
              </serviceCertificate>
            </clientCredentials>
          </behavior>
        </endpointBehaviors>