带传输模式的NetTcpBinding和ClientCridentialType无模式要求证书启动主机

时间:2013-02-20 11:29:15

标签: .net wcf security

对于使用无身份验证的netTcpBinding,是否真的无法使用传输安全性?我真的不想为我的服务使用任何证书,我在下面使用我们配置我的服务,当我启动我的服务主机我得到应用程序错误我提到下面(要求证书,我甚至没有提到关于应用程序中任何地方的证书但是,在我将服务凭据放入行为后,服务开始运行。谁能告诉我这是什么原因?

错误:“未提供服务证书。在ServiceCredentials中指定服务证书。”

 <service name="ConsoleApplication1.WCFService1" behaviorConfiguration="" >
                <endpoint address="net.tcp://localhost:853/WCFService1" binding="netTcpBinding"
                    bindingConfiguration="SecurityCheckBinding"  name="TCPEndpoint" contract="ConsoleApplication1.IService1" />

                <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://localhost:853/WCFService1" />

                    </baseAddresses>
                </host>

            </service>



<bindings>
        <netTcpBinding>
          <binding name="SecurityCheckBinding">
            <security mode="Transport">
              <transport clientCredentialType="None"  ></transport>
            </security>
          </binding>
        </netTcpBinding>
      </bindings>

这个场景我得到了上面提到的错误,但是当我刚刚指定了可信证书params时,它就开始运行了。

  <behaviors>
    <serviceBehaviors>
      <behavior name="MyServiceBehaviour">
        <serviceCredentials>
          <serviceCertificate findValue="MyTestCA" x509FindType="FindByIssuerName" storeLocation="LocalMachine" storeName="My" />
        </serviceCredentials>

      </behavior>
    </serviceBehaviors>
  </behaviors>

1 个答案:

答案 0 :(得分:1)

当您选择具有传输安全性的NetTpcBinding时,您声明必须在传输级别上保护通道。为此,您应使用Windows SSPI机制或生成将用于加密的证书。 第一个选项假定您使用Windows凭据通过设置来使SSPI库中的加密处理:

<transport clientCredentialType="Windows"></transport>

在这种情况下,进程将是透明的,但是如果您的客户端位于另一个域中,则必须应用额外的跨域信任设置。 另一个选择是安装证书,这很容易,并且在国际内有很多例子:

<transport clientCredentialType="Certificate"></transport>

证书是自动签名的(在服务器本身生成),所以它不会花费你一些钱只需要你在服务器上 - 客户不需要安装任何东西。

即使您声明无凭证,您仍需要提供加密证书:

<transport clientCredentialType="None"></transport>

您仍然可以选择不使用安全性,然后您的按摩将在平面文本中。要关闭安全性,只需通过设置:

来更改传输安全性
<security mode="None">