Como uso senhas sem texto sem formatação para usuários do Tomcat?

19

No Ubuntu 10.04.3 LTS, após a instalação do Tomcat 6, a maneira de adicionar uma conta de administrador / administrador é adicionar um registro como este para /etc/tomcat6/tomcat-users.xml:

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

Essa senha está em texto simples, e não me sinto confortável com isso. Existe uma maneira de usar algo como um hash? Se você tem uma solução que não seja do Ubuntu, provavelmente posso traduzi-la.

John Whitlock
fonte

Respostas:

14

Retirado desta página

  1. adicione o atributo "digest" no seu elemento server.xmlcom um algoritmo de hash como valor (valores possíveis são, por exemplo md5, sha-1ou sha-256, onde o último é altamente recomendado).
  2. Corre $CATALINE_HOME/bin/digest.sh -a <YOUR_HASH_ALGORITHM> <YOUR_PASSWORD>
  3. Você obterá uma saída no seguinte formato <YOUR_PASSWORD>:<ENCRYPTED_PASSWORD>
  4. Substituir valor do usuário passwordatributo no seu tomcat-users.xmlpara<ENCRYPTED_PASSWORD>
  5. reinicie o tomcat

Consulte também: Senha de resumo do Tomcat

Alex
fonte
1
+1, mas eek no MD5. Use "sha-1"ou "sha-256", se funcionar.
Shane Madden
1
No Tomcat 7, agora existe um digest.bat no diretório bin para fazer isso. Exemplo:digest.bat -a "md5" <YOUR_PASSWORD>
Zasz
1
Isso está incompleto para o Tomat 8.5.x. Veja meu comentário abaixo para obter as etapas completas. Você também deve modificar sua região no server.xml, bem como no método de autenticação web.xml.
atom88
8

Para quem vem aqui procurando informações sobre o Tomcat 8.0.15 ou mais recente, provavelmente deve usar o SecretKeyCredentialHandler com PBKDF2, pois é muito mais seguro (ou seja, mais difícil de quebrar) do que um simples resumo de mensagens.

Por exemplo, no seu server.xml:

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

Com essa configuração, use o seguinte para gerar a saída em hash da sua senha:

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

com a contagem da iteração e o tamanho do sal (em bytes) de sua escolha. Observe que o comprimento da chave precisa ser o mesmo definido no server.xml devido ao erro 60446 . No entanto, deve ser corrigido em breve a montante.

ATENÇÃO! Certifique-se de que sua senha não seja salva no histórico de comandos do seu shell. No bash, isso é alcançado precedendo o comando com um espaço vazio.

O comando produzirá sua senha em texto sem formatação e uma representação hexadecimal das credenciais resultantes, que você deve usar como atributo de senha em seu tomcat-users.xml.

A documentação para o componente CredentialHandler pode ser encontrada aqui . Os valores possíveis para o atributo do algoritmo podem ser encontrados aqui .

Niklas Holm
fonte
0

1) Gere uma senha: /bin>digest.bat -s 0 -a sha-256

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

A senha a ser usada é: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

* Nota importante: Você deve usar "-s 0" (salt 0) ou não funcionará.

2) cole a senha acima no seu arquivo tomcat-users.xml.

Exemplo:

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

3) configure server.xml para usar senhas baseadas em hash de digestão SHA-256:

4) configure seu web.xml para usar senhas “DIGEST” e atualize o RealmName para corresponder acima (na seção 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
fonte
Você está confundindo a autenticação DIGEST com senhas com hash. A questão é sobre o uso de senhas com hash com autenticação BASIC.
rustyx 13/09/19