2016-03-21 208 views
1

我有以下场景: 我有一个服务器运行在Oracle数据库(使用Java SE 6)内,使用Apache HTTP客户端(使用Java)连接到Web服务。 Web服务需要使用Kerberos进行保护,即使用SPNEGO认证。GSSManager.createCredential如何获取Kerberos密钥和TGT?

我的服务器有一个Kerberos主体,随机密钥导出到密钥表中,然后导入到数据库表中。 因此,我有一个KerberosPrincipal与一些关联的KerberosKey对象(每个加密方法一个),我收集的一个主题中的所有信息。

我希望下一步是联系KDC以获取TGT并将其存储在主题中。我怎么做?我在此发现的所有文档都假定这发生在登录模块中,但在我的方案中没有登录。或者下面的一个会给我打电话给KDC吗?

现在我需要调用GSSManager.createCredential创建GSSCredential我可以包装成KerberosCredentials,我也可以添加到一个HttpClientContext BasicCredentialsProvider,所以HttpClient的可以做SPNEGO认证。

但是,如何将我的主题中的信息放入GSSCredential中?

回答

1

经过大约一周的网络搜索后,我终于找到了答案here。 片段从DOC:

  1. 应用程序调用JAAS登录,这反过来又调用配置Krb5LoginModule
  2. Krb5LoginModule无论是从KDC或从现有的票证缓存获得TGT(KerberosTicket)对于用户来说,并将该TGT在私有证书设定一个主题
  3. 应用程序检索填充的主题,然后调用与Subject.doAs/doAsPrivileged它放在线程执行CLIENTACTION
  4. CLIENTACTION调用的GSSManager的访问控制背景下,这个主题.createCredential方法,在desiredMechs中传递Kerberos V5 OID。
  5. GSSManager.createCredential调用Kerberos V5 GSS-API提供程序,要求提供Kerberos凭证以启动安全上下文。
  6. Kerberos提供程序从当前访问控制上下文获取Subject,并通过其私有凭证集搜索代表用户TGT的有效KerberosTicket。
  7. KerberosTicket被返回给GSSManager,该GSSManager将其存储在GSSCredential容器实例中并返回给调用者。