我正在使用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模块。有没有示例说明如何做到这一点?
答案 0 :(得分:0)
Kerberos的凭据不可移植,从技术上讲,您无法在机器 A 上执行 kinit ,然后使用该TGT(票证授予票证)或ST(服务票证) machine B (委托除外),因为TGT和ST都包含客户端的加密IP地址。
ST由服务服务器的密钥加密,这意味着只有SS可以验证/读取故障单的内容。
TGT由TGS(票证授予服务器)的密钥加密。
顺便说一句,也许你想要的是所谓的 Kerberos keytab ---其中包含校长的user name
&amp; password
。
但是,通过网络传输keytab很危险并且已弃用。