0

当客户端生成的服务票据发送到服务器时,GSSContext的acceptSecContext方法就是对KDC编码的票据进行解码。

当以服务票证作为其参数调用此方法时,票证实际上是否被发送到 KDC 本身进行解码?

否则这不是安全问题吗?因为如果服务器可以解码任何有效的票证,除了发送给它的某个客户端或票证的用途或对象之外,它一无所知?

有点困惑

非常感谢任何澄清。

我读过应用程序服务器和 KDC 确实进行了通信,但我认为这并不总是正确的。

例如,看一下示例服务器代码

应用程序服务器登录以获取上下文

LoginContext loginCtx = null;
loginCtx = new LoginContext("SPN", new LoginCallbackHandler( id, password ));
loginCtx.login();
Subject subject = loginCtx.getSubject();

然后使用该主题,它将执行特权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 
    }
...
}
4

1 回答 1

1

票实际上是被发送到 KDC 本身进行解码吗?

不,应用程序服务器和KDC 通信。

这就是为什么您必须在使用系统之前将keytab生成的文件复制KDC到应用程序服务器上。

服务器尝试解密票证,如果他能够这样做,那么他假设票证是由 生成的KDC,因为他是唯一知道密码的人,所以它是有效票证。


在系统有效启动之前预共享密钥/密码,然后从不通过网络发送它是许多身份验证协议中的常见机制,例如

于 2018-06-28T14:31:43.783 回答