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

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

答案1

取自这一页

  1. 在您的元素上添加“digest”属性,并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 摘要密码

答案2

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

并选择迭代次数和盐大小(以字节为单位)。请注意,密钥长度需要与 server.xml 中定义的相同,因为错误 60446。不过上游应该很快就会修复这个问题。

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

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

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

答案3

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

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

使用的密码是: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>

相关内容