我正在使用 WCF 进行一些测试,目前我们有以下服务器设置(简化的配置):
<netTcpBinding>
<binding name="netTcp" ... >
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</netTcpBinding>
...
<serviceBehaviors>
<behavior name="defaultServiceBehavior">
<serviceCredentials>
<serviceCertificate
findValue="OurCert"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindBySubjectName"/>
</serviceCredentials>
</behaviour>
</serviceBehaviors>
以及以下客户端配置:
<endpointBehaviors>
<behavior name="NoRevNoValid">
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="None"
revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
因此,其想法是服务器证书用于加密数据,但客户端无需验证证书(客户端无论如何都不会拥有证书的 CA)。
但是,此配置不会阻止客户端验证证书。它仍然尝试遍历信任链并寻找撤销列表。
我找到了这个链接声明certificateValidationMode属性不适用于net.tcp绑定 http://social.msdn.microsoft.com/Forums/en/wcf/thread/7ebb41e3-5061-4c2c-b26a-4d4b5eb9d24c.
我已经考虑过处理ServicePointManager.ServerCertificateValidationCallback事件,但再次看来这仅适用于基于 Http 的绑定。
据推测,这些都是因为在使用 net.tcp 绑定时,传输安全性的处理超出了应用程序的范围?
还有其他方法可以强制不进行证书验证吗?
经过大量测试后,声明“certificateValidationMode”属性不适用于 net.tcp 绑定的链接似乎是错误的!
此选项仍然适用于 net.tcp 绑定。
但是,用于 net.tcp 传输安全的证书仍会加载,并且仍会尝试解析其 CA 和 CRL。我使用的证书包含 CRL 和 CA 的 URL,因此证书存储每次都会解析这些 URL(URL 不可用),即使 WCF 配置随后表示忽略证书是否无效。
所以答案是 WCF 配置的certificateValidationMode 仍然适用,只是证书仍将由证书存储“解析”。对于大多数人来说这不应该是一个大问题,但我将针对证书所具有的 URL 进行一些进一步的测试,因为这些 URL 在连接过程中会导致我们出现严重的延迟问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)