Al reconfigurar un datasource, montar un entorno espejo o diagnosticar un fallo de conexión contra la base de datos, aparece siempre la misma necesidad: saber qué contraseña tiene guardada realmente ese datasource. En el fichero de configuración el valor está cifrado con la clave del propio domain —un literal con prefijo {AES}— y no hay forma de leerlo a simple vista. La buena noticia es que WebLogic expone el mismo servicio de cifrado que usa internamente, así que un script corto de WLST basta para recuperarla.
Cuándo aplica
Escenarios validados:
- Oracle WebLogic Server 11.1.x o superior.
- JDK 1.7 o superior.
- Cualquier plataforma soportada por el producto.
El procedimiento solo funciona desde dentro del propio domain. El descifrado se apoya en SerializedSystemIni.dat, el fichero de clave que WebLogic genera para cada domain y que vive en $DOMAIN_HOME/security: sin él, el valor {AES} no se puede revertir. En la práctica esto significa que necesitas acceso al filesystem del servidor con el usuario propietario de la instalación —el mismo nivel de acceso que ya te permitiría, sin más, cambiar la contraseña del datasource.
1. Cargar las variables de entorno del domain
El script setDomainEnv.sh está en $DOMAIN_HOME/bin. Cárgalo en la sesión actual con un punto delante, para que las variables persistan al terminar:
[oracle@apps bin]$ . ./setDomainEnv.shEn el ejemplo de este artículo, la ruta completa del domain es /u02/app/oracle/Middleware/12.2.1.3/Oracle_Home/user_projects/domains/clusterdemo1.
2. Preparar el script de WLST
Guarda el siguiente contenido como decrypdspwd.py:
from weblogic.security.internal import *
from weblogic.security.internal.encryption import *
password = "{AES}f7eMFPnALxR1Df+MMyhgELTNz7LuhQx9JHFtzwSO81E="
path = "/u02/app/oracle/Middleware/12.2.1.3/Oracle_Home/user_projects/domains/clusterdemo1"
encryptionService = SerializedSystemIni.getEncryptionService(path)
cService = ClearOrEncryptedService(encryptionService)
print "password: " + cService.decrypt(password)Solo hay dos valores que ajustar:
password— el literal cifrado del datasource, tal cual aparece en$DOMAIN_HOME/config/jdbc/<nombre-del-datasource>-jdbc.xml, dentro del elementopassword-encrypted. Cópialo completo, incluido el prefijo{AES}.path— la ruta absoluta de tu$DOMAIN_HOME.
3. Ejecutar el script
[oracle@apps scripts]$ java weblogic.WLST decrypdspwd.py
Initializing WebLogic Scripting Tool (WLST) ...
Welcome to WebLogic Server Administration Scripting Shell
Type help() for help on available commands
password: oraclessResultado
La última línea devuelve la contraseña en claro. El mismo servicio funciona en sentido inverso: si necesitas generar un literal cifrado para inyectarlo en la configuración de otro entorno, sustituye la llamada a decrypt() por encrypt() sobre el valor en texto plano.
Ten en cuenta que el literal resultante solo es válido en el domain que lo cifró. Al clonar un domain o al copiar configuración entre entornos, los valores {AES} del origen no sirven en el destino: hay que volver a cifrarlos allí con su propio SerializedSystemIni.dat.
