Instalei o Tomcat 5.5.8 na minha máquina e ao configurar o Realm ele pede o digest, mas exatamente o faz este parametro? Nas versões anteriores eu não o utilizava.
Quanto ao sistema consegui depois de muito esforço fazê-lo iniciar sem erros no tomcat, porém utilizando o Realm não estou conseguindo me logar, no logs não gera nada, acredito que seja possa ser ester parametro, alguém pode me explicar o que é ele???
Digest no Realm
2 Respostas
Antigamente no Tomcat você podia cadastrar usuários (em tomcat-users.xml) com o usuário e a senha em claro. Obviamente você só conseguiria ter uma instalação segura do Tomcat se usasse alguma permissão do sistema operacional para deixar esse arquivo inacessível para um usuário comum, o que não é fácil.
Agora, embora isso ainda seja possível, o default é requerer um “digest” (SHA1 ou MD5), que é uma forma de “digerir” a senha. (resumir, é a tradução mais correta, mas para você ter uma idéia melhor vou usar a tradução ‘Tabajara’. É que depois da ‘digestão’ o resultado é um verdadeiro ‘____’, como vou lhe mostrar.)
Por exemplo, para a senha “laura” você tem o digest MD5 680e89809965ec41e64dc7e447f175ab, e para a senha “Laura” o digest MD5 é 37905b9b4fdb8fa311b30448254d51fe. Você tem valores muito diferentes para valores parecidos.
Não é exatamente uma forma de criptografia, porque não se consegue obter “Laura” a partir do valor 37905b9b4fdb8fa311b30448254d51fe, a menos que você tentasse todos os valores possíveis de senhas (o que não é difícil, pois você pode usar dicionários para facilitar).
(Assim como não dá para obter um ovo cru a partir de um ovo cozido, sem perdas. Se a senha fosse criptografada, você poderia recuperar o ovo cru a partir do ovo cozido; mas ela é “digested”, portanto não dá para fazer isso.).
Como é que o Tomcat consegue conferir a senha? Ele recalcula o digest da senha que você passou e checa se bate com o que ele tem. Se bater, provavelmente a senha está correta. A chance de você ter passado acidentalmente uma senha que tem o mesmo MD5 que a senha original é muito, muito pequena, mas não é zero.
Estou usando aqui o MD5, mas prefira o SHA1 para digest. O valor é maior (20 bytes em vez de 16) e mais seguro.
A propósito Santoro,
Pra você “digerir” sua senha, usa uma classe do J2SDK chamada MessageDigest.
Aqui vai um trecho de código exemplo:
MessageDigest md = MessageDigest.getInstance("SHA");
try {
...
byte[] encriptedString = md.digest(minhaString.getBytes());
...
}