对于使用无身份验证的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>
答案 0 :(得分:1)
当您选择具有传输安全性的NetTpcBinding时,您声明必须在传输级别上保护通道。为此,您应使用Windows SSPI机制或生成将用于加密的证书。 第一个选项假定您使用Windows凭据通过设置来使SSPI库中的加密处理:
<transport clientCredentialType="Windows"></transport>
在这种情况下,进程将是透明的,但是如果您的客户端位于另一个域中,则必须应用额外的跨域信任设置。 另一个选择是安装证书,这很容易,并且在国际内有很多例子:
<transport clientCredentialType="Certificate"></transport>
证书是自动签名的(在服务器本身生成),所以它不会花费你一些钱只需要你在服务器上 - 客户不需要安装任何东西。
即使您声明无凭证,您仍需要提供加密证书:
<transport clientCredentialType="None"></transport>
您仍然可以选择不使用安全性,然后您的按摩将在平面文本中。要关闭安全性,只需通过设置:
来更改传输安全性<security mode="None">