好的,所以我试图通过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丢失后重新建立连接。
什么行不通的是更新。基本上情况如下:
sun Kerberos api在票证中查找TGT,但找不到它,因此无法获得新票证。我得到的错误是:
GSSException:未提供有效凭据(机制级别:无法找到任何Kerberos tgt) at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:147)
所以,我的问题是:除了不使用Jboss缓存(或使用infinispan并在它变得过时之前驱逐凭证)之外,还有其他方法可以获得新的Kerberos票证吗?