1

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

错误:“未提供服务证书。在 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>

这种情况我遇到了上述错误,但是当我刚刚指定受信任的证书参数时,它开始运行。

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

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

1 回答 1

1

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

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

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

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

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

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

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

而且您仍然可以选择不使用安全性,然后您的按摩将在飞机文本中。要关闭安全性,只需通过设置更改传输安全性:

<security mode="None">
于 2013-02-20T13:27:18.910 回答