Tomcat – 了解CredentialHandler

我需要在我的最新项目中使用Container Managed Security and Authentication。 我有一些关于如何配置凭据处理程序的疑问。

  1. 首先, CredentialHandler声明会如何? 有人可以使用声明的algorithm属性提供NestedCredentialHandler的示例声明。 我需要知道,因为Realms中的Digest属性已被弃用。 我没有在网上找到任何例子,我完全感到困惑。
  2. MessageDigestCredentialHandlerSecretKeyCredentialHandler之间的区别是哪一个更安全?
  3. SecretKeyCredentialHandler在文档中 指定了一个算法 ,即PBKDF2WithHmacSHA1 。 还有哪些其他算法?

为了回答第一点,这里是切换到Tomcat 8之前和之后我的context.xml中的的比较:

之前:

  

后:

    

NestedCredentialHandler适用于有多种摘要方法的情况,例如您以前使用过MessageDigest但现在要切换更安全的PBKDF2-SHA512配置,并且不希望使已配置的密码无效。

例如:

      

这将进入你的Realm元素。

SecretKeyCredentialHandler是在Tomcat 8.0.15中引入的,它使用javax.crypto API中的SecretKeyFactory而不是旧方法(MessageDigest)来改变密码。 SecretKeyFactory允许更好的算法,如PBKDF2和HMAC-SHA-512,而不是普通的哈希算法,如SHA-512。 之后的旧方法可通过MessageDigestCredentialHandler获得,这相当于直接在Realm元素上设置摘要属性。

请注意 ,直接设置摘要属性或使用MessageDigestCredentialHandler而不使用可选的迭代属性(仅限8.0.15+)将只进行一次迭代。 这不安全

至于SecretKeyFactory可用的算法,JDK 8的Java加密体系结构标准算法名称文档是我能找到的最佳参考,但它没有明确列出所有组合。 这些是我在我的平台上发现的(Linux 3.13.0,Oracle JDK 1.8.0_111),但是你的可能支持其他组合。

  • PBKDF2WithHmacSHA1
  • PBKDF2WithHmacSHA224
  • PBKDF2WithHmacSHA256
  • PBKDF2WithHmacSHA384
  • PBKDF2WithHmacSHA512
  • PBEWithMD5AndDES
  • PBEWithSHA1AndDESede
  • DES
  • DESede

MessageDigestCredentialHandler的算法字段是一个字符串,可以采用此处描述的任何值: http : //docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#MessageDigest

MessageDigestCredentialHandler和SecretKeyHandler之间的区别是要使用的算法,我认为,由于javax.crypto.SecretKeyFactory,SecretKeyHandler更安全。

我无法提供任何配置示例,但当我使用TomcatRealms实现自定义AuthorizationProviders时,我总是在META-INF / context.xml中配置它

最后,我想建议你,多年来我一直在使用自定义AuthorizationProviders,但现在我将所有这些都迁移到了Spring Security。

我需要将相同的myapp.war二进制文件部署到Tomcat7和Tomcat8环境。 使用此配置,两个环境都可以正常工

MyApp的/ META-INF / context.xml的

    

您在启动时在catalina日志文件中看到未知参数的警告但无关紧要。