Un caso muy habitual en las integraciones que suele suceder muy a menudo, es encontrarse con un servicio protegido con seguridad SSL.
Esto implica que cuando desde una aplicación Service Bus o SOA se necesita realizar una llamada a ese servicio protegido con SSL, WebLogic fallará si no tiene los cetificados SSL para dicho servicio.
En este articulo, se detallará el proceso de como instalar estos certificados SSL en WebLogic para que la llamada a un servicio con proteccion SSL pueda efectuarse satisfactoriamente.
Instalando un Certificado SSL en WebLogic
1_ Visite desde un navegador web, la URL del contrato (WSDL) del Serivico que se esta queriendo consumir.
Por ejemplo: https://localhost:443/fndAppCoreServices/ServiceCatalogService?wsdl
2_ En el caso de Mozilla Firefox, hacer clic en el icono con simbolo de candado:
luego haga clic en Secure Connection > y luego clic en el botón
3_ Haga clic en el botón
dele un nombre al certificado, por ejemplo: miServicio.crt
4_ Importar el certificado a un Java KeyStore:
En este punto hay dos opciones:
- Usamos el DemoTrust KeyStore que viene por defecto con WebLogic.
- Usamos un KeySotre propio.
En este articulo, se hara uso de la KeyStore DemoTrust que viene por defecto con WebLogic.
> Abra una terminal o consola de linea de comandos y ejecute la siguiente linea:
keytool -import -alias miServicio -keystore C:\Path\to\MW_HOME\wlserver\server\lib\DemoTrust.jks -trustcacerts -file C:\Path\to\miServicio.crt
este comando requerira una contraseña para acceder a la KeyStore DemoTrust.jks, ingrese: DemoTrustKeyStorePassPhrase
Respete minusculas y mayusculas.
escriba yes y precione ENTER
Se adjuntan varias capturas de pantalla para poder apreciar el proceso de importar un certificado SSL.
5_ Comprobar que se importo correctamente, para ello corremos el comando:
keytool -list -keystore C:\Path\to\MW_HOME\wlserver\server\lib\DemoTrust.jks
6_ Comprobar que WebLogic esta usando DemoTrust.jks como KeyStore de certificados. Para esto, abra el archivo:
C:\Path\to\MW_HOME\user_projects\domains\mi_domain\bin\setDomainEnv.cmd
vaya a la linea donde dice:
set EXTRA_JAVA_PROPERTIES=%EXTRA_JAVA_PROPERTIES% -Dsoa.archives...
En mi caso, la linea 283, y corroborar que este presente la siguiente propiedad:
-Djavax.net.ssl.trustStore=%WL_HOME%\server\lib\DemoTrust.jks
Workarounds
Existen dos soluciones alternativas en caso de que algo falle:
1. Deshabilitar la verificación de certificados SSL:
- Acceder a la consola web de WebLogic (http://dns-o-ip:7001/console)
- Habilitar sesión para editar haciendo clic en el botón Lock and Edit.
- Entrar en la sección de Servidores haciendo clic en Environments --> Servers.
- Seleccionamos el manejado en cuestión.
- Dirigirse a la pestaña Configuration y luego a la pestaña SSL. Expandir la sección Advanced y seleccionar la opción None en la propiedad Hostname Verification.
- Guardar los cambios haciendo clic en el botón Save y luego en Activate Changes.
2. Permitir que WebLogic pueda validar wildcards (comodines):
Muchas veces los certificados SSL vienen preparados con wildcards (o comodines) en el formato de *.empresa.web lo cual quiere decir que son válidos para cualquier URL que termine con esa porción de DNS, es decir, si tuviéramos un servicio con una URL con el siguiente formato: servicio1.empresa.web por el hecho de tener un * (asterisco) al principio de la DNS permitirá validar la URL de forma correcta.
Por defecto, WebLogic viene configurado para no interpretar los wildcards en los certificados para validarlos contra la URL del servicio. Para poder habilitar esto, realizar los siguientes pasos:
- Acceder a la consola web de WebLogic (http://dns-o-ip:7001/console)
- Habilitar sesión para editar haciendo clic en el botón Lock and Edit.
- Entrar en la sección de Servidores haciendo clic en Environments --> Servers.
- Seleccionamos el manejado en cuestión.
- Dirigirse a la pestaña Configuration y luego a la pestaña SSL. Expandir la sección Advanced y seleccionar la opción Custom Hostname Verifier en la propiedad Hostname Verification y ademas en el recuadro de la opción siguiente Custom Hostname Verifier agregamos la siguiente clase: weblogic.security.utils.SSLWLSWildcardHostnameVerifier
- Guardar los cambios haciendo clic en el botón Save y luego en Activate Changes.
A ti por comentar, Saludos!
ResponderEliminarExcelente Bro. Gracias.
ResponderEliminarHola quiero instalar un certificado a una aplicación web que desarrolle y despliego en weblogic, me podrían indicar oirfa com lo hago.
ResponderEliminarEn ese caso deberia instalarse el certificado en el cacert del JDK con el que este levantando WebLogic. Intentaré hacer un articulo sobre ello. Saludos!
Eliminarsuper super bien explicado muchas gracias Ingeniero, me sirvio mucho
ResponderEliminarConsulta, es necesario reiniciar la instancia weblogic para que acepte los cambios?
ResponderEliminarDepende... si estas usando el Java keystore que viene por defecto con WebLogic (DemoTrust.jks) no seria necesario el reinicio. Si vas a generar un keystore nuevo, si... seria necesario.
EliminarDepende como tengas configurado tu dominio. Saludos!
Gracias por responder, estoy utilizando un JKS customizado de la empresa. Instalé el certificado siguiendo los pasos del post pero me bota este error al reiniciar el weblogic. "Cannot retrieve identity certificate and private key on server wl_app_serverX, because the keystore entry alias is not specified."
EliminarHola que tal... esta muy raro, si ejecutas un "keytool list" ves que el certificado que agregaste tiene un alias?
EliminarLo que puedes hacer para verificar esto, es acceder a la consola de weblogic, y seguir estos pasos:
1. Dirigete a la sección "Environments --> Servers" y haz clic sobre el "AdminServer"
2. Haz clic en la pestaña "Configurations" y luego en la pestaña "Keystores"
3. Aqui puedes cambiar algunos ajustes relacionados con el keystores, recuerda editar la sesión con "Lock and Edit" para hacer algun cambio... deberias asegurarte que este tomando bien tu JKS customizado
Hola, gracias por la respuesta. El problema que el certificado aceptaba nombres de dominio como "*.midominio.com", pero el server al que yo quería acceder tenía como hostname algo así "5.midominio.com", entonces el verificador de dominio del weblogic no lo podía identificar, lo resolví agregando un "Verificador de Nombre de Host Personalizado" en la pestaña "SSL/Opciones Avanzadas" del server. La clase que resuelve este tipo de conflictos es "weblogic.security.utils.SSLWLSWildcardHostnameVerifier". Con eso ya me funcionó todo bien. Saludos y gracias por la ayuda.
EliminarExcelente! gracias por el aporte... que bueno que lo hayas solucionado. Saludos
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminar