题 如何为Tomcat用户使用非明文密码?


在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解决方案,我可以翻译它。


19
2017-07-29 19:24






答案:


取自 这一页

  1. 在你的元素中添加“digest”属性 server.xml 使用散列算法作为值(例如,可能的值 md5sha-1 要么 sha-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摘要密码


14
2017-07-29 19:29



+1,但是在MD5的时候。使用 "sha-1" 要么 "sha-256",如果它能工作的话。 - Shane Madden♦
在Tomcat 7中,bin目录中现在有一个digest.bat来执行此操作。示例: digest.bat -a "md5" <YOUR_PASSWORD> - Zasz
对于Tomat 8.5.x,这是不完整的。有关完整步骤,请参阅下面的评论。您还必须在server.xml以及web.xml身份验证方法中修改您的领域。 - atom88


对于来这里寻找有关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"

使用您选择的迭代计数和salt-size(以字节为单位)。请注意,密钥长度需要与server.xml中定义的相同,因为 错误60446。它应该很快在上游修复。

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

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

可以找到CredentialHandler组件的文档 这里。可以找到算法属性的可能值 这里


8
2017-12-02 14:56





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>

0
2018-06-15 16:39



你将DIGEST auth与散列密码混淆了。问题是关于在BASIC身份验证中使用散列密码。 - rustyx