viernes, 30 de diciembre de 2016

¿Cómo instalar un certificado SSL en un Servidor WebLogic 12c?


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 More Information.


3_ Haga clic en el botón View Certificate, luego clic en la pestaña Details y finalmente exporte el certificado utilizando el botón Export....



dele un nombre al certificado, por ejemplo: miServicio.crt


4_ Importar el certificado a un Java KeyStore:

En este punto hay dos opciones:

  1. Usamos el DemoTrust KeyStore que viene por defecto con WebLogic.
  2. 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.


12 comentarios:

  1. Excelente Bro. Gracias.

    ResponderEliminar
  2. Hola quiero instalar un certificado a una aplicación web que desarrolle y despliego en weblogic, me podrían indicar oirfa com lo hago.

    ResponderEliminar
    Respuestas
    1. En ese caso deberia instalarse el certificado en el cacert del JDK con el que este levantando WebLogic. Intentaré hacer un articulo sobre ello. Saludos!

      Eliminar
  3. super super bien explicado muchas gracias Ingeniero, me sirvio mucho

    ResponderEliminar
  4. Consulta, es necesario reiniciar la instancia weblogic para que acepte los cambios?

    ResponderEliminar
    Respuestas
    1. Depende... 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.

      Depende como tengas configurado tu dominio. Saludos!

      Eliminar
    2. 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."

      Eliminar
    3. Hola que tal... esta muy raro, si ejecutas un "keytool list" ves que el certificado que agregaste tiene un alias?

      Lo 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

      Eliminar
    4. 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.

      Eliminar
    5. Excelente! gracias por el aporte... que bueno que lo hayas solucionado. Saludos

      Eliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar