Java 8 更新 161 破坏了 HTTPClient Kerberos 身份验证

标签 java security authentication kerberos apache-httpclient-4.x

我的 HTTPClient Kerberos 身份验证设置类似于 this one .我的 login.conf 看起来像这样:

com.sun.security.jgss.login {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=true
  useKeyTab=true
  storeKey=true
  keyTab=<keytab>
  principal=<principal>;
};
com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=true
  useKeyTab=true
  storeKey=true
  keyTab=<principal>
  principal=<keytab>;
};
com.sun.security.jgss.accept {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=true
  useKeyTab=true
  storeKey=true
  keyTab=<keytab>
  principal=<principal>;
};

此设置一直适用于我的 jdk8u151,但 Oracle 最近发布了 jdk8u161,但它不再有效。调试看起来像这样:

对比调试日志,jdk8u161停在这一行:

CCacheInputStream: readFlags()

而 jdk8u151 遵循这一行

unsupported key type found the default TGT: 18

我加了

default_tkt_enctypes = aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes = aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
permitted_enctypes = aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc

krb5.conf,但没有帮助。

最佳答案

找到我自己的答案:

  • 从 login.conf 中删除所有 useTicketCache=true
  • rc4-hmac 添加到 default_tkt_enctypesdefault_tgs_enctypespermitted_enctypes

login.conf 现在看起来像这样:

com.sun.security.jgss.login {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  storeKey=true
  keyTab=<keytab>
  principal=<principal>;
};
com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  storeKey=true
  keyTab=<keytab>
  principal=<principal>;
};
com.sun.security.jgss.accept {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  storeKey=true
  keyTab=<keytab>
  principal=<principal>;
};

和 krb5.conf:

[libdefaults]
  ...
  default_tkt_enctypes = aes256-cts aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
  default_tgs_enctypes = aes256-cts aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
  permitted_enctypes = aes256-cts aes128-cts rc4-hmac des3-cbc-sha1 des-cbc-md5 des-cbc-crc
  ...

关于Java 8 更新 161 破坏了 HTTPClient Kerberos 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48411107/

相关文章:

java - 在 JPA 的多对多关系中使用组合键

java - JPA 与 Hibernate - 序列不适用于 XML

authentication - Cloudant身份验证:缺少_users数据库

python - 有没有办法使用特定的 C 函数/符号作为 nm 的输出

java.security 与 javax.security

python - 无法使用 pickle 和多个模块加载文件

java - 另外调用使用 ejb 远程访问和自定义登录模块/applicationrealm 的 Wildfly 设置

java - 如何在 JavaFX 中设置 ProgressBar 组件的样式

java - Lombok + JPA 规范元模型生成 : is it possible?

java - 在keytool中导入证书并不能解决java证书问题