Recuperar senha do Weblogic

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:

#!/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/

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.

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');

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.

EncryptionService es=SerializedSystemIni.getEncryptionService(secFolder);
ClearOrEncryptedService ces= new ClearOrEncryptedService(es);
System.out.println(ces.decrypt(pass));

Pronto! Estou disponibilizando também essa classe pra quem só quiser executar. O comando para executar é o seguinte:

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}

por exemplo:

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=

E o dado descriptografado irá aparecer no console! Funciona em Windows também :).

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6