【问题标题】:Tomcat Digest with Manager WebAppTomcat Digest with Manager WebApp
【发布时间】:2010-06-05 02:23:14
【问题描述】:

我正在尝试为 tomcat 管理器应用程序设置摘要密码。

我有

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

在我的 tomcat server.xml 中,将管理器 Web 应用程序的 web.xml 更改为使用摘要并将领域名称更改为 TESTING:

<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>TESTING</realm-name>
  </login-config>

然后我使用包含的 bat 文件生成 md5 哈希:

C:\tomcat6\bin>digest.bat -a MD5 tomcat:TESTING:testor
tomcat:TESTING:testor:1926e50988667dbd5deda9df02b82f28

然后我在 tomcat-users.xml 中有一个用户,该用户使用该摘要哈希作为密码:

<!-- testor -->
  <user username="tomcat" password="1926e50988667dbd5deda9df02b82f28" roles="manager"/>

我还修改了 401.jsp 页面以使用摘要和 TESTING 作为领域名称。

我启动 Web 应用程序,转到 http://localhost:8080/manager/html 并收到标准表单提示。输入 tomcat 作为用户,输入 testor 作为密码,我按回车只得到一个 401。我当然一次又一次地尝试得到一个 401。

据我所知,由于 ant 无法进行摘要,我最终可能会通过 SSL 进行 BASIC 身份验证。

但是有没有办法做到这一点?

【问题讨论】:

  • 如果您的问题得到解决,可以请您接受答案吗?!?!

标签: tomcat md5 digest


【解决方案1】:

1) 生成密码: /bin>digest.bat -s 0 -a sha-256

示例: /bin>digest.bat -s 0 -a sha-256 管理员

使用的密码是: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

*重要提示:必须使用“-s 0”(salt 0) 否则不起作用。

2) 将上面的密码粘贴到您的 tomcat-users.xml 文件中。

例子:

<!-- for password “admin” -->
<user username="tomcat" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918" roles="manager-gui,manager,admin"></user>

3) 配置 server.xml 以使用基于 SHA-256 摘要散列的密码:

4) 配置您的 web.xml 以使用“DIGEST”密码并更新 RealmName 以匹配上面(在 HTMLManager 部分中)

 <catalina_home>/webapps/manager\WEB-INF\web.xml

    <login-config>
        <auth-method>DIGEST</auth-method>
        <realm-name>UserDatabase</realm-name> 
    </login-config>

Full context:
  <servlet>
    <servlet-name>HTMLManager</servlet-name>
    <servlet-class>org.apache.catalina.manager.HTMLManagerServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>2</param-value>
    </init-param>

… SNIPPED_FOR_BREVITY ...   

    <login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>UserDatabase</realm-name>
  </login-config>

    <multipart-config>
      <!-- 50MB max -->
      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
  </servlet>

【讨论】:

    【解决方案2】:

    我用 Tomcat 8.0.32 尝试了 KiaMorot 的答案,但没有奏效。当我在生成摘要密码时添加选项“-s 0”(盐长度为零)时,它确实有效:

    sudo /opt/apache-tomcat-8.0.32/bin/digest.sh -s 0 -a MD5 'developer:UserDatabase:my clear text password'

    在我的命令的这个引用中,我省略了我的明文密码,并将其替换为字符串“我的明文密码”。请保留单引号,否则 shell 会解释密码中的特殊字符。

    您可以检查省略 -s 选项是否是您的问题,如下所示。如果我在没有 -s 选项的情况下多次执行 digest.sh 命令,虽然每次重复的命令行相同,但我会得到不同的结果。

    【讨论】:

    • 感谢您提供有关 -s 0 (Salt 0) 的说明,这有帮助
    【解决方案3】:

    我相信您错过了 server.xml 中定义资源名称的行。

     <Resource
        auth="Container"
        description="User database that can be updated and saved"
        factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
        name="UserDatabase"  #<--------------NOTE
        pathname="conf/tomcat-users.xml"
        type="org.apache.catalina.UserDatabase"/>
    

    &lt;Resource&gt; 定义中name 属性的值必须与&lt;Realm&gt; 定义中resourceName 属性的值匹配,例如

    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
       resourceName="UserDatabase"  #<------------NOTE
       digest="MD5"/>
    

    这必须与web.xml 中的&lt;realm-name&gt; 配置相匹配,例如

    <login-config>
        <auth-method>DIGEST</auth-method>
        <realm-name>UserDatabase</realm-name> #<------------NOTE
    </login-config>
    

    别忘了按如下方式生成您的密码:

    C:\tomcat6\bin>digest.bat -a MD5 tomcat:UserDatabase:testor

    如果所有这些都得到满足,您的设置应该可以像我的情况一样完美地工作。

    请注意,对于 tomcat7 和 tomcat8 MD5 作为摘要算法是必须

    【讨论】:

    • 我能够让它与 SHA-256 一起工作。使用此步骤(缺少)配置您的 web.xml 以使用“DIGEST”密码并更新 RealmName 以匹配上面(在 HTMLManager 部分中)/webapps/manager\WEB-INF\web.xml 完整上下文: HTMLManagerorg.apache.catalina.manager.HTMLManagerServlet ... SNIPPED_FOR_BREVITY .. DIGEST UserDatabase
    • @KiaMorot 你能解释一下为什么 MD5 是必须的吗? @atom88 你能解释一下你是如何让 SHA-256 工作的吗?我能够让 MD5 在 Tomcat 8.5.32 中工作。但是当我更改为 SHA-256 时,它不起作用。两者之间的唯一变化是在 1. server.xml:&lt;CredentialHandler className="org.apache.catalina.realm.MessageDigestCredentialHandler" algorithm="SHA-256" /&gt;(从“MD5”更改); 2.生成密码:digest.sh -s 0 -a MD5 uname:UserDatabase:password VS digest.sh -s 0 -a SHA-256 uname:UserDatabase:password; 3. 为用户更新 conf/tomcat-users.xml 中的password 字段:uname
    【解决方案4】:

    以下对我有用:

    digest.sh -a MD5 tomcat:UserDatabase:testor
    

    【讨论】:

      【解决方案5】:

      一切都很好。但是您使用什么路径来更新 web.xml?应该是/webapps/manager/WEB-INF/web.xml 这里改一下loginconfig。

      并确保您使用的是什么版本,因为 8.0.26 不是生成 md5 密码的稳定版本。

      【讨论】:

        猜你喜欢
        • 2013-03-22
        • 2012-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-08
        • 1970-01-01
        相关资源
        最近更新 更多