如何为Tomcat用户使用非纯文本密码?


19

在Ubuntu 10.04.3 LTS上,在安装Tomcat 6之后,添加管理者/管理员帐户的方法是将这样的记录添加到/etc/tomcat6/tomcat-users.xml

<role rolename="manager"/>
<role rolename="admin"/>
<user username="user" password="password" roles="manager,admin"/>

该密码为纯文本格式,我对此不太满意。有没有办法使用像哈希这样的东西呢?如果您有非Ubuntu解决方案,我可能可以翻译一下。

Answers:


14

取自此页面

  1. server.xml使用散列算法在元素上添加“摘要”属性作为值(可能的值例如md5sha-1sha-256,强烈建议使用后者)。
  2. $CATALINE_HOME/bin/digest.sh -a <YOUR_HASH_ALGORITHM> <YOUR_PASSWORD>
  3. 您将获得以下形式的输出 <YOUR_PASSWORD>:<ENCRYPTED_PASSWORD>
  4. 将用户password属性的值替换tomcat-users.xml<ENCRYPTED_PASSWORD>
  5. 重新启动tomcat

另请参阅:Tomcat摘要密码


1
+1,但请注意MD5。如果可以,请使用"sha-1""sha-256"
Shane Madden

1
在Tomcat 7中,bin目录中现在有一个digest.bat。示例:digest.bat -a "md5" <YOUR_PASSWORD>
Zasz 2011年

1
对于Tomat 8.5.x,这尚未完成。请参阅下面的我的评论以获取完整步骤。您还必须在server.xml以及web.xml身份验证方法中修改领域。
原子88

8

对于来这里寻找有关Tomcat 8.0.15或更高版本的信息的任何人,您可能应该将SecretKeyCredentialHandler与PBKDF2结合使用,因为它比简单的消息摘要安全得多(即更难以破解)。

例如,在您的server.xml中:

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
       resourceName="UserDatabase">
   <CredentialHandler className="org.apache.catalina.realm.SecretKeyCredentialHandler"
                      algorithm="PBKDF2WithHmacSHA512"
                      keyLength="256"
   />
</Realm>

使用此配置,请使用以下命令从您的密码生成哈希输出:

 $CATALINA_HOME/bin/digest.sh -a "PBKDF2WithHmacSHA512" -i 100000 -s 16 -k 256 -h "org.apache.catalina.realm.SecretKeyCredentialHandler" "YOUR_PASSWORD"

以及您选择的迭代计数和盐大小(以字节为单位)。请注意,由于错误60446,密钥长度必须与server.xml中定义的密钥长度相同。但是应该很快在上游修复它。

警告!请确保您的密码未保存在Shell的命令历史记录中。在bash中,这是通过在命令前面加上空白来实现的。

该命令将以纯文本格式输出密码,并以十六进制表示形式输出结果凭证,您应该将其用作tomcat-users.xml中的password属性。

可以在此处找到CredentialHandler组件的文档。可在此处找到algorithm属性的可能值。


0

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

示例:/ bin> digest.bat -s 0 -a sha-256 admin

使用的密码是:8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

*重要说明:您必须使用“ -s 0”(盐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>

您将DIGEST身份验证与哈希密码混淆了。问题是关于在BASIC身份验证中使用哈希密码。
rustyx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.