Comment utiliser des mots de passe non en texte brut pour les utilisateurs de Tomcat?

19

Sur Ubuntu 10.04.3 LTS, après avoir installé Tomcat 6, la façon d'ajouter un compte manager / admin est d'ajouter un enregistrement comme celui-ci à /etc/tomcat6/tomcat-users.xml:

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

Ce mot de passe est en clair, et je ne suis pas à l'aise avec cela. Existe-t-il un moyen d'utiliser quelque chose comme un hachage à la place? Si vous avez une solution non Ubuntu, je peux probablement la traduire.

John Whitlock
la source

Réponses:

14

Tiré de cette page

  1. ajoutez l'attribut "digest" sur votre élément server.xmlavec un algorithme de hachage comme valeur (les valeurs possibles sont par exemple md5, sha-1ou sha-256, lorsque ce dernier est fortement recommandé).
  2. Courir $CATALINE_HOME/bin/digest.sh -a <YOUR_HASH_ALGORITHM> <YOUR_PASSWORD>
  3. Vous obtiendrez une sortie sous la forme suivante <YOUR_PASSWORD>:<ENCRYPTED_PASSWORD>
  4. Remplacez la valeur de l' passwordattribut de l'utilisateur dans votre tomcat-users.xmlà<ENCRYPTED_PASSWORD>
  5. redémarrer tomcat

Voir aussi: Tomcat digest password

Alex
la source
1
+1, mais eek au MD5. Utilisez "sha-1"ou "sha-256", si cela fonctionne.
Shane Madden
1
Dans Tomcat 7, il y a maintenant un digest.bat dans le répertoire bin pour ce faire. Exemple:digest.bat -a "md5" <YOUR_PASSWORD>
Zasz
1
Ceci n'est pas terminé pour Tomat 8.5.x. Voir mon commentaire ci-dessous pour les étapes complètes. Vous devez également modifier votre domaine dans le serveur.xml ainsi que dans la méthode d'authentification web.xml.
atom88
8

Pour ceux qui viennent ici à la recherche d'informations sur Tomcat 8.0.15 ou une version plus récente, vous devriez probablement utiliser SecretKeyCredentialHandler avec PBKDF2, car il est beaucoup plus sûr (c'est-à-dire plus difficile à casser) qu'un simple résumé de message.

Par exemple, dans votre server.xml:

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

Avec cette configuration, utilisez ce qui suit pour générer la sortie hachée à partir de votre mot de passe:

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

avec le nombre d'itérations et la taille du sel (en octets) de votre choix. Notez que la longueur de clé doit être la même que celle définie dans server.xml en raison du bogue 60446 . Il devrait cependant être corrigé très rapidement en amont.

AVERTISSEMENT! Veuillez vous assurer que votre mot de passe n'est pas enregistré dans l'historique des commandes de votre shell. En bash, ceci est réalisé en précédant la commande d'un espace vide.

La commande affichera votre mot de passe en texte brut et une représentation hexadécimale des informations d'identification résultantes, que vous devez utiliser comme attribut de mot de passe dans votre tomcat-users.xml.

La documentation du composant CredentialHandler est disponible ici . Les valeurs possibles pour l'attribut d'algorithme peuvent être trouvées ici .

Niklas Holm
la source
0

1) Générez le mot de passe: /bin>digest.bat -s 0 -a sha-256

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

Le mot de passe à utiliser est: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

* Remarque importante: vous devez utiliser «-s 0» (sel 0) sinon cela ne fonctionnera pas.

2) collez le mot de passe ci-dessus dans votre fichier tomcat-users.xml.

Exemple:

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

3) configurez server.xml pour utiliser les mots de passe basés sur le hachage SHA-256:

4) configurez votre web.xml pour utiliser les mots de passe «DIGEST» et mettez à jour RealmName pour correspondre ci-dessus (dans la section 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
la source
Vous confondez l'authentification DIGEST avec des mots de passe hachés. La question concerne l'utilisation de mots de passe hachés avec l'authentification BASIC.
rustyx