¿Cómo uso contraseñas que no sean de texto sin formato para los usuarios de Tomcat?

19

En Ubuntu 10.04.3 LTS, después de instalar Tomcat 6, la forma de agregar una cuenta de administrador / administrador es agregar un registro como este para /etc/tomcat6/tomcat-users.xml:

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

Esa contraseña está en texto plano, y no me siento cómodo con eso. ¿Hay alguna manera de usar algo como un hash en su lugar? Si tiene una solución que no es Ubuntu, probablemente pueda traducirla.

John Whitlock
fuente

Respuestas:

14

Tomado de esta página

  1. agregue el atributo "digest" en su elemento server.xmlcon un algoritmo hash como valor (los valores posibles son, por ejemplo md5, sha-1o sha-256, donde se recomienda encarecidamente este último).
  2. correr $CATALINE_HOME/bin/digest.sh -a <YOUR_HASH_ALGORITHM> <YOUR_PASSWORD>
  3. Obtendrá un resultado en el siguiente formulario <YOUR_PASSWORD>:<ENCRYPTED_PASSWORD>
  4. Reemplazar valor de usuario del passwordatributo en el tomcat-users.xmlque<ENCRYPTED_PASSWORD>
  5. reiniciar tomcat

Ver también: contraseña de resumen de Tomcat

Alex
fuente
1
+1, pero eek en el MD5. Use "sha-1"o "sha-256", si funcionará.
Shane Madden
1
En Tomcat 7 ahora hay un digest.bat en el directorio bin para hacer esto. Ejemplo:digest.bat -a "md5" <YOUR_PASSWORD>
Zasz
1
Esto está incompleto para Tomat 8.5.x. Vea mi comentario a continuación para ver los pasos completos. También debe modificar su reino en server.xml y en el método de autenticación web.xml.
atom88
8

Para cualquiera que venga aquí en busca de información sobre Tomcat 8.0.15 o posterior, probablemente debería usar SecretKeyCredentialHandler con PBKDF2, ya que es mucho más seguro (es decir, más difícil de descifrar) que un simple resumen de mensaje.

Por ejemplo, en su server.xml:

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

Con esta configuración, use lo siguiente para generar el resultado hash de su contraseña:

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

con el recuento de iteraciones y el tamaño de sal (en bytes) de su elección. Tenga en cuenta que la longitud de la clave debe ser la misma que la definida en server.xml debido al error 60446 . Sin embargo, debería solucionarse muy pronto río arriba.

¡ADVERTENCIA! Asegúrese de que su contraseña no se guarde en el historial de comandos de su shell. En bash esto se logra precediendo el comando con un espacio vacío.

El comando generará su contraseña en texto plano y una representación hexadecimal de las credenciales resultantes, que debe usar como atributo de contraseña en su tomcat-users.xml.

La documentación para el componente CredentialHandler se puede encontrar aquí . Los valores posibles para el atributo del algoritmo se pueden encontrar aquí .

Niklas Holm
fuente
0

1) Generar contraseña: /bin>digest.bat -s 0 -a sha-256

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

La contraseña para usar es: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

* Nota importante: debe usar "-s 0" (sal 0) o no funcionará.

2) pegue la contraseña anterior en su archivo tomcat-users.xml.

Ejemplo:

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

3) configure server.xml para usar contraseñas basadas en resumen hash SHA-256:

4) configure su web.xml para usar contraseñas "DIGEST" y actualice RealmName para que coincida arriba (en la sección 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>
atom88
fuente
Estás confundiendo la autenticación DIGEST con contraseñas hash. La pregunta es sobre el uso de contraseñas hash con autenticación BASIC.
rustyx