使用证书和传输SecurityMode时,WCF正在向域控制器发送Kerberos请求

时间:2015-05-20 13:00:33

标签: wcf certificate wcf-binding kerberos wcf-security

我们有几个模块的应用程序,它们使用WCF相互连接。我们将它们配置为使用NetTcpBinding(下面是负责设置的代码的一部分)。客户端和服务器部分都有类似的设置,一切都运行良好。

除非客户端向服务器发送请求,否则我们的公司域控制器会对Kerberos TGT进行额外查询。它是名称类型为NT-X500-PRINCIPAL的AS-REQ类型查询,名称是证书主题(用于加密连接的证书)。作为响应,我们得到错误ERR_C_PRINCIPAL_UNKNOWN。

这对我们的应用程序来说不是问题,但是由于我们提出了很多请求,我们在域控制器上充斥着日志。有没有办法阻止系统发送上面的Kerberos请求?

绑定配置:

var binding = new NetTcpBinding
{
    MaxBufferSize = 5000000,
    (...)
};


binding.Security.Mode = SecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
binding.Security.Transport.ProtectionLevel = ProtectionLevel.EncryptAndSign;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;
(...)

channelFactory.Credentials.ClientCertificate.SetCertificate(
      StoreLocation.LocalMachine,
      StoreName.My,
      X509FindType.FindBySubjectDistinguishedName,
      certificateSubject);
channelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.ChainTrust;
channelFactory.Credentials.ServiceCertificate.Authentication.TrustedStoreLocation = StoreLocation.LocalMachine;
channelFactory.Credentials.ServiceCertificate.Authentication.RevocationMode = X509RevocationMode.NoCheck;

1 个答案:

答案 0 :(得分:0)

事实证明,Kerberos查询是由此行引起的:

binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;

如果它被更改为None,则查询将消失(在我们的案例中也不需要此行)。