如何保存Kerberos私有凭据以便在其他计算机中使用

时间:2014-07-18 04:39:03

标签: java kerberos jaas

我正在使用JAAS获取Kerberos凭据。我的配置文件如下所示:

SignedOnUserLoginContext
{
  com.sun.security.auth.module.Krb5LoginModule required debug=true useTicketCache=true doNotPrompt=true;
};

获取Kerberos凭据的代码

try {           
        LoginContext lc = new LoginContext("SignedOnUserLoginContext");
        lc.login();
        Subject signedOnUserSubject = lc.getSubject();
        Set<Object> privateCred = signedOnUserSubject.getPrivateCredentials();

            for (Object privates : privateCred) {
                if (privates instanceof KerberosTicket) {
                    KerberosTicket ticket = (KerberosTicket)privates;
                    return ticket.getEncoded();
                }
            }

    }

当我将票证转移到其他计算机并使用JAAS使用Kerberos登录时,它不会被验证。收到时我的配置文件:

 KrbLogin{
 com.sun.security.auth.module.Krb5LoginModule required
            principal=principal@realm
            useTicketCache="FILE:///where i store the ticket"
 };

我怀疑我不能像这样获得票证,但需要获取getPrivateCredentials()返回的全部私有凭证。另外,使用doNotPrompt = true和useTicketCache = true我试图从Windows缓存中获取。

我在some Java security book中读到私人凭据可以包含其他数据,例如私钥,加密密钥,密码等......

因此,我需要获取getPrivateCredentials()的返回值。如何将getPrivateCredentials()返回的内容转换为实际的Kerberos凭据文件。我读了以便访问这些数据,我需要使用PrivateCredentialPermission模块。有没有示例说明如何做到这一点?

1 个答案:

答案 0 :(得分:0)

Kerberos的凭据不可移植,从技术上讲,您无法在机器 A 上执行 kinit ,然后使用该TGT(票证授予票证)或ST(服务票证) machine B (委托除外),因为TGT和ST都包含客户端的加密IP地址。

ST由服务服务器的密钥加密,这意味着只有SS可以验证/读取故障单的内容。

TGT由TGS(票证授予服务器)的密钥加密。

顺便说一句,也许你想要的是所谓的 Kerberos keytab ---其中包含校长的user name&amp; password

但是,通过网络传输keytab很危险并且已弃用。