【问题标题】:Is it possible to reference a keytab from the classpath in jaas.conf?是否可以从 jaas.conf 的类路径中引用密钥表?
【发布时间】:2018-12-04 08:17:46
【问题描述】:

是否可以从 jaas.conf 中的类路径中引用 keytab?

我尝试了以下方法,但似乎没有任何效果:

Client{
keyTab=classpath: /mykeytab.keytab
}

Client{
keyTab=file: /mykeytab.keytab
}

Client{
keyTab=file: resources/mykeytab.keytab
}

【问题讨论】:

    标签: java classpath kerberos jaas keytab


    【解决方案1】:

    据我所知,除了 jaas.conf 文件中的 keytab 的绝对路径之外,不能使用任何东西。

    Krb5LoginModule.java 中,可以看到(来自,例如Krb5LoginModule.java at github.com

    if (useKeyTab) {
      ktab = (keyTabName == null)
               ? KeyTab.getInstance()
               : KeyTab.getInstance(new File(keyTabName));
    

    .getInstance() 代码将在实例化的File 对象上使用.getPath()(参见KeyTab.java)。

    因此,基本方法中没有任何内容可以搜索类路径。另请参阅this question here about keytab configuration as well

    也就是说,并没有显示在 OP 的配置文件中,可以将类从通常的“com.sun.security.authmodule.Krb5LoginModule”更改为自定义模块。在这个自定义模块中,可以执行诸如在Krb5LoginModuleinitialize 方法中使用的Map<String,?> 参数中设置条目等操作。

    我们已经实现了这样一种方法,允许在我们的客户端应用程序中定义各种设置,而不是试图让我们的用户在客户端上编辑 jaas.conf 文件。因此,我们使用一个自定义模块,该模块使用组合方法封装Krb5LoginModule, but sets all of the desired options into theMap`。

    类似于:

    Map<String, String> mOpts = new HashMap<>(); // options
    
    mOpts.put("doNotPrompt", Boolean.TRUE.toString());
    mOpts.put("useTicketCache", Boolean.FALSE.toString());
    mOpts.put("useKeyTab", Boolean.TRUE.toString());
    mOpts.put("keyTab", options.getKeytabPath().toString());
    mOpts.put("principal", PrincipalUtils.getDefaultPrincipal().getName());
    
    krb5LM.initialize(_subject, options.getCallbackHandler(), mSS, mOpts);
    
    //
    // attempt to authenticate the user
    //
    krb5LM.login();
    

    可以在类路径中搜索所需的文件名,然后将找到的文件传递给Map。在上面的准示例中,options 对象已从用户的首选项中提取 keytab 并对其进行验证。但与其拥有一个特定的预浏览文件,不如实现对类路径的搜索。

    【讨论】:

    • 非常感谢凯文,我会采用与您相同的方法。另一种选择可能是包覆盖我们正在使用的驱动程序中存在的 Kerberos.java,并在文件拉入配置后替换/更改配置。但是我决定不这样做,因为它似乎“聪明”,这从来都不是一件好事:p
    猜你喜欢
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2014-02-13
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多