【问题标题】:How to use hashed passwords with BASIC authentication in tomcat6?如何在 tomcat6 中使用带有 BASIC 身份验证的散列密码?
【发布时间】:2011-09-12 01:26:06
【问题描述】:

我想在 tomcat-users.xml 中使用带有 BASIC 身份验证的散列密码。我将 digest="SHA" 添加到领域定义中。 UserDatabase 部分在 $TOMCAT_HOME/conf/server.xml 中定义如下:

<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
...
<Engine>
...
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             digest="SHA"
             resourceName="UserDatabase" />  
...
</Engine>

但重启后,tomcat 仍将 $TOMCAT_HOME/conf/tomcat-users.xml 中定义的所有密码视为纯文本密码。

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<user username="guest" password="e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4" roles="role1" />
</tomcat-users>

即我可以使用用户名/密码 guest/e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4 登录,但不能使用应有的 guest/secret 登录。

请指出我做错了什么?

【问题讨论】:

  • 好的,看起来有些东西重写了 Web 应用程序中的领域定义,因为 /manager/ 按预期工作。

标签: tomcat hash basic-authentication sha


【解决方案1】:

您的解决方案应该适用于 Tomcat 7,但从 Tomcat 8 开始,您必须在 Realm 中指定 CredentialHandler 部分,如下所示:

Tomcat 6...7:

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             digest="sha"
             resourceName="UserDatabase" />  

Tomcat 8:

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase">
           <CredentialHandler
              className="org.apache.catalina.realm.MessageDigestCredentialHandler"     
              algorithm="sha" />
      </Realm>

注意:如需更安全的散列,如 PBKDF2WithHmacSHA512,请参阅this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2012-09-09
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多