Tive um problema com a senha do Weblogic e resolvi criar soluções para resetar a senha. O inconveniente é que não recuperamos a senha e sim apagamos e criamos ela novamente. E se quisermos recuperar? Primeiro vamos à solução de apagar a senha, após isso veremos como recuperar a senha sem a necessidade de apagá-la - ideal e menos trabalhoso.
Existem vários "how-to" na internet para resetar a senha do Weblogic, mas para facilitar criei um bash script.
Esse script só funciona para servers que utilizem o DefaultAuthenticator.
Segue abaixo o código dele:
[cc lang="bash"]
#!/bin/sh
# Author: Thiago Galbiatti Vespa
# 09/17/2010
## Please configure this variables
WL_HOME="/home/thiago/Oracle/Middleware/wlserver_10.3/server/bin"
DOMAIN_HOME="/home/thiago/Oracle/Middleware/user_projects/domains/sample_domain"
ADMIN_SERVER_NAME="AdminServer"
BACKUP_HOME="/home/thiago/domainBckp"
### End
NEW_USERNAME="$1"
NEW_PASSWORD="$2"
if [ -z $1 ] ; then
echo "Please inform the new username!";
exit 1;
fi
if [ -z $2 ] ; then
echo "Please inform the new password!";
exit 1;
fi
NOW=`date +%y%m%d%H%m`
# Backup the domain
tar cvzf ${BACKUP_HOME}/${ADMIN_SERVER_NAME}-${NOW}.tar.gz ${DOMAIN_HOME}
# Weblogic enviroment
. ${WL_HOME}/setWLSEnv.sh
# New DefaultAuthenticatorInit.ldift
java weblogic.security.utils.AdminAccount ${NEW_USERNAME} ${NEW_PASSWORD} .
# Move DefaultAuthenticatorInit.ldift to security dir
mv DefaultAuthenticatorInit.ldift ${DOMAIN_HOME}/security/DefaultAuthenticatorInit.ldift
# Replace the old boot.properties
echo "username=$1" > ${DOMAIN_HOME}/servers/${ADMIN_SERVER_NAME}/security/boot.properties
echo "password=$2" >> ${DOMAIN_HOME}/servers/${ADMIN_SERVER_NAME}/security/boot.properties
# This folder will be recreated
rm -rf ${DOMAIN_HOME}/servers/${ADMIN_SERVER_NAME}/data/ldap/
[/cc]
Para o Weblogic Portal que utiliza o SQLAutenticator como padrão, basta alterar na tabela de usuários e grupos, utilizando o código abaixo.
[cc lang="sql"]
INSERT INTO USERS (U_NAME, U_PASSWORD, U_DESCRIPTION) values ('portaladmin', '{SHA-1}lkBtwhsv3pYGt25u4h8/vG/HsCA=', 'Admin for portal domain')
INSERT INTO GROUPMEMBERS (G_NAME, G_MEMBER) values ('Administrators', 'portaladmin');
INSERT INTO GROUPMEMBERS (G_NAME, G_MEMBER) values ('PortalSystemAdministrators', 'portaladmin');[/cc]
Achei também alguns códigos que prometem recuperar a senha do Weblogic, o problema é que ele só funciona com 3DES e não com AES. Que é a criptografia que está sendo utilizada pelo meu Weblogic 10.3.2.
Funçando um pouco nas classes do Weblogic achei algumas responsáveis pela criptografia. Deu um bom trabalho para descobrir como o Weblogic fazia, pois envolve criptografia AES e classes internas do Weblogic, mas foi a melhor pro meu caso e agora é bem simples de se executar. Basta passar o serviço de criptografia do Weblogic e mandar descriptografar :D.
[cc lang="java"]
EncryptionService es=SerializedSystemIni.getEncryptionService(secFolder);
ClearOrEncryptedService ces= new ClearOrEncryptedService(es);
System.out.println(ces.decrypt(pass));
[/cc]
Pronto! Estou disponibilizando também essa classe pra quem só quiser executar. O comando para executar é o seguinte:
[cc lang="bash"]java -cp ${WL_HOME}/wlserver_10.3/server/lib/weblogic.jar:thiagovespa-weblogic-utils.jar br.com.thiagovespa.weblogic.util.RecoverLostPass ${DOMAIN_HOME}/security ${SENHA}[/cc]
por exemplo:
[cc lang="bash"]java -cp /home/thiago/Oracle10.3.2/Middleware/wlserver_10.3/server/lib/weblogic.jar:thiagovespa-weblogic-utils.jar br.com.thiagovespa.weblogic.util.RecoverLostPass /home/thiago/Oracle10.3.2/Middleware/user_projects/domains/as_domain/security {AES}kox/gGlyD4HZ7iAUEONYD0AQBJZaI88USMYbFxbwc7c=[/cc]
E o dado descriptografado irá aparecer no console! Funciona em Windows também :).
Boa noite Thiago tudo bem?
Por acaso você não teria o schema para decriptografar as senhas do SQLAuthenticator gravadas no banco como SHA-1 ?
Valeu.