【问题标题】:Can't get TGT Ticket from the LSA Cache无法从 LSA 缓存中获取 TGT 票证
【发布时间】:2016-10-19 13:34:05
【问题描述】:

我有一个 java 客户端,它应该从 LSA 接收 TGT 票证以进行客户端服务器身份验证。所以 krbc_{username} 文件不应该被使用并被删除。如果我用 kinit.exe 设置 krbc_{username} 它会像预期的那样工作,但就像之前所说的那样不是我的目标。但是找不到 LSA 缓存中的 TGT。这是我在控制台中看到的。

在 LSA 中找不到 TGT

代码片段。

        try {
        LoginContext lc = new LoginContext("Client", new    LibsCallbackHandler(userTicket));

        lc.login();
        Subject s = lc.getSubject();
        logger.info(s);

在 jaas.conf 中 useTicketCache 设置为 true。如果我使用我正在使用的对话框登录,则会设置 Userticket。如果我使用我的用户名和密码,我会收到一张新票,这很好,但不足以进行单点登录。我还在注册表中将“allowtgtsessionkey”设置为 1。

【问题讨论】:

    标签: java kerberos jaas


    【解决方案1】:

    这个question应该包含你的问题的解决方案,让我们引用答案:

    删除当前用户名所在文件夹下的krb5cc*文件 C:\用户

    您还需要设置一个注册表项,引用:

    还将以下注册表值设置为 1:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters

    值名称:AllowTGTSessionKey

    值类型:REG_DWORD

    值:1

    另一个问题可能与票证 keyType 有关,您的应用程序将忽略具有不受支持的 keyType 的票证。 例如,我有进入 LSA 的 type-18 票证,如果没有安装 Java JCE 扩展(来自 Oracle),它不适用于 Jaas。 为了支持更广泛的 keyType,您需要安装 Oracle Java JCE 扩展(添加对 AES >= 256.. 的支持)。 OpenJDK Java 发行版支持所有 keyTypes/AES,无需扩展。

    您还应该在完整的 kerberos 调试模式下执行您的应用程序,它将提供有用的日志消息:

    java -Dsun.security.krb5.debug=true -Dsun.security.jgss.debug=true -jar appname.jar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多