Wildfly上没有续订Kerberos票证

时间:2016-04-04 08:48:59

标签: java sql-server kerberos wildfly-9

好的,所以我试图通过Kerberos从位于ubuntu上的Wildfly 9连接到MSSql Server。 KDC是Microsoft AD。

我设法让它工作得很好,有一个看起来像这样的安全域:

<login-module code="org.jboss.security.negotiation.KerberosLoginModule" flag="required" module="org.jboss.security.negotiation">
    <module-option name="storeKey" value="false"/>
    <module-option name="useKeyTab" value="true"/>
    <module-option name="keyTab" value="/opt/wildfly-9.0.2/standalone/configuration/krb5.keytab"/>
    <module-option name="principal" value="app-BV"/>
    <module-option name="useTicketCache" value="false"/>
    <module-option name="debug" value="true"/>
    <module-option name="refreshKrb5Config" value="true"/>
    <module-option name="isInitiator" value="true"/>
    <module-option name="addGSSCredential" value="true"/>
    <module-option name="delegationCredential" value="USE"/>
    <module-option name="wrapGSSCredential" value="true"/>
</login-module>

我正在使用keytab,也使用新的wrapGSSCredential标志,因为microsoft的jdbc驱动程序在登录后立即处理票证,在后续的sql调用中导致NPE没有设置此标志(参见bug description

这很好用,这意味着我可以连接到数据库,并在conn丢失后重新建立连接。

什么行不通的是更新。基本上情况如下:

  1. Wildfly缓存获得的凭据
  2. 即使基础故障单已过期,Wildfly对一组凭据的缓存验证也会通过
  3. 10小时后(AD的故障单的默认生命周期),Wildfly传递给驱动程序的故障单已过期
  4. sun Kerberos api在票证中查找TGT,但找不到它,因此无法获得新票证。我得到的错误是:

    GSSException:未提供有效凭据(机制级别:无法找到任何Kerberos tgt)         at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147)

  5. 所以,我的问题是:除了不使用Jboss缓存(或使用infinispan并在它变得过时之前驱逐凭证)之外,还有其他方法可以获得新的Kerberos票证吗?

0 个答案:

没有答案