Java GSSContext acceptSecContext方法中存在安全漏洞?(爪哇)
当客户端生成的服务票证被发送到服务器时,GSSContext acceptSecContext方法将对KDC编码的此类票证进行解码 当使用服务票证作为参数调用此方法时,票证是否实际发送到KDC本身进行解码 否则这不是一个安全问题吗?因为如果服务器能够解码任何有效的票证,而除了发送给它的某个客户机或者票证是什么或者票证是给谁的以外,它一无所知 有点困惑 如有任何澄清,我们将不胜感激 我曾读到应用服务器和KDC之间确实存在通信,但我认为这并不总是正确的 例如,看看示例服务器代码 应用程序服务器登录以获取上下文Java GSSContext acceptSecContext方法中存在安全漏洞?(爪哇),java,kerberos,gssapi,kdc,radius,Java,Kerberos,Gssapi,Kdc,Radius,当客户端生成的服务票证被发送到服务器时,GSSContext acceptSecContext方法将对KDC编码的此类票证进行解码 当使用服务票证作为参数调用此方法时,票证是否实际发送到KDC本身进行解码 否则这不是一个安全问题吗?因为如果服务器能够解码任何有效的票证,而除了发送给它的某个客户机或者票证是什么或者票证是给谁的以外,它一无所知 有点困惑 如有任何澄清,我们将不胜感激 我曾读到应用服务器和KDC之间确实存在通信,但我认为这并不总是正确的 例如,看看示例服务器代码 应用程序服务器登录以
LoginContext loginCtx = null;
loginCtx = new LoginContext("SPN", new LoginCallbackHandler( id, password ));
loginCtx.login();
Subject subject = loginCtx.getSubject();
然后使用该sujbect,它将执行previlege doAs
Subject.doAs( subject, new PrivilegedAction<String>() {
public void run() {
try {
GSSManager manager = GSSManager.getInstance();
GSSContext context = manager.createContext( (GSSCredential) null);
context.acceptSecContext( serviceTicket, 0, serviceTicket.length);
// now do something with decoded ticket
}
...
}
Subject.doAs(Subject,newprivilegedaction(){
公开募捐{
试一试{
GSSManager manager=GSSManager.getInstance();
GSSContext context=manager.createContext((GSSCredential)null);
acceptSecContext(serviceTicket,0,serviceTicket.length);
//现在用解码的票做些什么
}
...
}
票证是否真的被发送到KDC本身进行解码
否,应用程序服务器和KDC不通信
这就是为什么在使用系统之前必须将KDC
上生成的keytab
复制到应用程序服务器上的原因
服务器尝试解密票据,如果他能够这样做,那么他假设票据是由KDC
生成的,因为他是唯一知道密码的人,那么它就是有效票据
在系统有效打开之前预先共享密钥/密码,然后再也不通过网络发送,这是许多身份验证协议中的一种常见机制,例如谢谢你的回答,但到目前为止,我看到的所有示例实际上都表明,应用服务器向KDC进行身份验证,并将主题取回,然后使用e GSSContext acceptSecContext方法来解码服务票证。这就是我真正感到困惑的原因。似乎服务票证正以该方法发送回KDC。我正在修改我的问题,以反映我刚才所说的。