无法让S4U2代理工作

时间:2017-05-10 11:11:26

标签: java kerberos gssapi subject

我的要求如下:

Client1与Service1交互,Service1又与Service 2交互。与Service 2的交互应代表Client1进行。这里使用的身份验证是kerberos,我在客户端显式设置requestCredDelegation(true)时遇到的问题很少。 我以为S4U2 self + S4U2 Proxy kerberos扩展可以解决这个问题。

这些是我所做的事情:

a)在AD中,在Service1帐户上,为特定服务启用了受信任委派。如果service2是一个简单的java服务,Service1通过套接字连接到Service2,我不确定应该选择哪种服务类型。我选择“主机”作为服务类型。

b)在我的Service1 java代码中,在客户端< - >之后建立服务器连接:   1)我创建服务器凭据:             serverCreds = manager.createCredential(null,GSSCredential.DEFAULT_LIFETIME,krb5Oid,                         GSSCredential.INITIATE_ONLY);;

2)。创建与客户端对应的GSSName             GSSName other = manager.createName(XXX,GSSName.NT_USER_NAME,krb5Oid);

3)GSSCredential clientcreds =((ExtendedGSSCredential)serverCreds).impersonate(other);

假冒的客户信用证显示为:: [GSSCredential: client@domain.COM 1.2.840.113554.1.2.2发起[class sun.security.jgss.krb5.Krb5ProxyCredential] client@domain.COM 1.3.6.1.5.5.2发起[class sun.security.jgss.spnego.SpNegoCredElement]]

不确定SpNegoCredElement出现的原因,但我根本不使用该机制。

4)拥有模拟的凭证,我尝试通过创建上下文将服务1连接到服务2:

GSSContext context = manager.createContext(serverName,                     krb5Oid,                     impersonatedUserCredential,                     GSSContext.DEFAULT_LIFETIME); ....... context.initSecContext(token,0,token.length);

我收到错误,找不到有效凭据。
我已从模拟的凭据创建了一个主题,并尝试运行特权操作,但显示类似的错误,在主题中找不到服务票证。

我看到当通过传递凭据创建主题时,Krb5ProxyCredential被忽略,

“跳过的信用元素:sun.security.jgss.krb5.Krb5ProxyCredential@7e0babb1”

有人能告诉我,我在这里失踪了。感谢。

0 个答案:

没有答案