我们有几个模块的应用程序,它们使用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;
答案 0 :(得分:0)
事实证明,Kerberos查询是由此行引起的:
binding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
如果它被更改为None,则查询将消失(在我们的案例中也不需要此行)。