Kerberos over HTTPS

时间:2013-09-10 10:58:15

标签: c# .net wcf security kerberos

我有一个由我自己的Windows应用程序托管的WCF服务。我希望服务使用客户端证书在传输级别验证客户端,并且当客户端与服务通信时,它必须传递客户端用户帐户的Kerberos票证。 Looking around on the internet我发现了服务的这种配置:

<bindings>
    <customBinding>
         <binding name="Kerberos (MsgHeader) over Transport (Certificate)">
             <textMessageEncoding messageVersion="Soap11" />
                 <security authenticationMode="KerberosOverTransport">
                     <secureConversationBootstrap />
                 </security>
              <httpsTransport requireClientCertificate="true" />
          </binding>
     </customBinding>
 </bindings>

他们说这种配置适用于微软的帮助。现在,我尝试通过代码复制此配置,因此我使用了以下代码段:

BindingElementCollection elementCollection = new BindingElementCollection();
elementCollection.Add(SecurityBindingElement.CreateKerberosOverTransportBindingElement());
elementCollection.Add(new TextMessageEncodingBindingElement() { MessageVersion = MessageVersion.Soap11 });
elementCollection.Add(new HttpsTransportBindingElement() { RequireClientCertificate = true });

return new CustomBinding(elementCollection);

我使用此绑定配置了端点以及绑定到端口的有效证书。然后,我在Visual Studio中的客户端项目中添加了一个服务引用。

为此,everthing工作得很好!我还配置客户端在与服务通信时发送其证书,这也工作正常。但是,当我尝试调用该服务的任何方法时,我收到以下错误:

  

从另一方收到了无担保或不正确安全的故障。请参阅内部FaultException以获取故障代码和详细信息。

当我检查内部异常时,我发现了以下错误:

  

处理邮件中的安全令牌时发生错误。

请帮忙吗?我是否需要进一步配置客户端以发送其Kerberos令牌或什么?

P.S。服务和客户端机器时钟是同步的。此外,服务和客户端位于连接到域的两台不同计算机上。

0 个答案:

没有答案