Certificados SSL/TLS para Desarrolladores – Caso Real SOA Suite

🔐 Certificados SSL/TLS explicados para desarrolladores (nivel dummy, pero PRO)

Una guía completa y práctica usando un caso real: el WebService HTTPS de SOA Suite en:

https://vsotdcorerh.mi-empresa.mx

Esta guía es para ti si has visto errores como:

  • PKIX path building failed
  • SEC_ERROR_UNKNOWN_ISSUER
  • unable to find valid certification path

🧭 Índice


🎯 Objetivos de esta guía

  • Entender qué es un certificado y por qué existe.
  • Aprender qué significan CA Root, CA Intermedia, PEM, CRT, PFX.
  • Comprender cómo funciona una cadena de confianza.
  • Resolver errores reales como PKIX y UNKNOWN_ISSUER.
  • Instalar correctamente certificados en Java, Linux/curl, Navegadores (Angular) y WebLogic.
  • Implementar un caso real usando certificados privados de “Mi Empresa”.

🧠 Conceptos clave (explicados con ejemplos reales)

Ejemplo de Certificados Estructura típica de un certificado digital.

Certificados involucrados (nombres reales del caso):

  1. mi-empresa-root-certificate-authority_ca.crtCA Root
  2. mi-empresa-intermediate-global-ca.crtCA Intermedia
  3. server-vsotdcorerh.mi-empresa.mx.crtCertificado del servidor

La Regla: Si el cliente confía en la Root y la Intermedia, automáticamente confiará en el servidor.

🔸 ¿Qué es HTTPS?

Es un túnel encriptado para conectar cliente ↔ servidor de forma segura.

🔸 ¿Qué es un certificado?

Es la “INE digital” del servidor.

🔸 ¿Qué es una CA?

Es como la SEP de los certificados: firma y valida identidades.

  • CA pública: navegadores la reconocen automáticamente (Google, DigiCert).
  • CA privada: NO es reconocida por clientes externos sin instalarla manualmente (como la de “Mi Empresa”).

🔗 Cadena de confianza (visual)

Flujo de confianza: Root CAIntermediate CAServer Certificate.

[Root CA] ─► [Intermediate CA] ─► [Server Certificate]
   │                │                     │
   │                │                     └── Tu SOA Suite
   │                └── Firma al servidor
   └── Firma a la intermedia

📄 Formatos de certificados (rápido y claro)

Extensión Qué es Llave privada
.crt / .cer Certificado público (PEM/Base64) ❌ No
.pem Contenedor Base64 (uno o varios certs) ❌/Depende
.pfx / .p12 Certificado + llave privada ✔ Sí
.jks Keystore Java ✔/❌ Depende

⚠️ IMPORTANTE: Nunca compartas llaves privadas (.key, .pfx, .p12).


🚨 Errores comunes y su significado real

Dónde falla la validación cuando falta un certificado en la cadena.

PKIX path building failed (Java)

Java no reconoce la CA que firmó el certificado del servidor.

Solución: Instalar Root + Intermedia en el cacerts de Java.

SEC_ERROR_UNKNOWN_ISSUER (curl / navegador / Linux)

El sistema operativo no conoce el emisor del certificado.

Solución: Instalar Root + Intermedia en el almacén de confianza del sistema operativo.

🛠 Instalación de certificados por plataforma

Esquema de comunicación: Cliente(s) → Load Balancer → SOA Suite (WebLogic).

🔷 1) Java (cacerts)

Ejecuta esto en tu servidor donde corre el cliente Java:

# Instalar Root
keytool -importcert -file mi-empresa-root-certificate-authority_ca.crt \
-keystore $JAVA_HOME/lib/security/cacerts -alias mi-empresaRootCA -storepass changeit

# Instalar Intermedia
keytool -importcert -file mi-empresa-intermediate-global-ca.crt \
-keystore $JAVA_HOME/lib/security/cacerts -alias mi-empresaIntermediateCA -storepass changeit

Verificación:

keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit | grep mi-empr

🔷 2) Linux (curl, scripts)

Para que comandos como curl o wget funcionen:

sudo cp mi-empresa-root-certificate-authority_ca.crt /etc/pki/ca-trust/source/anchors/
sudo cp mi-empresa-intermediate-global-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract

Verificación:

curl -v [https://vsotdcorerh.mi-empresa.mx](https://vsotdcorerh.mi-empresa.mx)

🔷 3) Navegador (Angular / Chrome)

Si tu aplicación Frontend (Angular/React) da error al consumir el servicio:

Windows:

  1. Doble clic al .crt → “Instalar certificado”.
  2. Seleccionar “Equipo local”.
  3. Ubicar manualmente en: Entidades de certificación raíz de confianza.

macOS:

  1. Abrir Keychain Access.
  2. Arrastrar el certificado a System.
  3. Doble clic → Trust → “Always Trust”.

🔷 4) WebLogic

Si WebLogic es quien consume el servicio:

keytool -importcert -file mi-empresa-root-certificate-authority_ca.crt \
-keystore $DOMAIN_HOME/config/fmwconfig/cacerts -alias mi-empresaRootCA -storepass changeit

keytool -importcert -file mi-empresa-intermediate-global-ca.crt \
-keystore $DOMAIN_HOME/config/fmwconfig/cacerts -alias mi-empresaIntermediateCA -storepass changeit

Nota: Requiere reinicio del dominio.

🧬 Cadena completa (cadena-completa.pem)

A veces necesitas un solo archivo con todo. El orden importa:

  1. Root
  2. Intermedia
  3. Server

Uso rápido para pruebas:

curl --cacert cadena-completa.pem [https://vsotdcorerh.mi-empresa.mx](https://vsotdcorerh.mi-empresa.mx)

✅ Qué instalar según cada escenario

Escenario ¿Qué instalar?
Cliente externo Root + Intermedia + Server cert
Java (backend) Root + Intermedia
Linux (curl/scripts) Root + Intermedia
Angular/Navegador Root + Intermedia
WebLogic Root + Intermedia

Regla de oro: Instala Root + Intermedia SIEMPRE. El Server cert solo instálalo si eres un cliente externo que no tiene forma de validar la cadena, pero usualmente no es necesario en el cacerts.

❓ FAQ (Preguntas frecuentes)

¿Debo enviar mi llave privada a otro equipo?

NO. NUNCA. Solo envía los certificados públicos (.crt o .cer). La llave privada se queda en el servidor origen.

¿Por qué a veces con el navegador funciona y con Java no?

Porque los navegadores (Chrome/Edge) usan su propio almacén de certificados o el de Windows. Java usa su propio archivo cacerts aislado.

¿Necesito importar el certificado del servidor (la hoja) en Java?

En general no. Si importas la Root y la Intermedia, Java validará automáticamente el certificado del servidor por la cadena de confianza.

¿Puedo usar .cer o .crt indistintamente?

Sí, generalmente ambos son archivos de texto (Base64/PEM). Lo importante es el contenido, no la extensión.

¿Qué significa unable to get local issuer certificate?

Significa que el sistema tiene el certificado del servidor, pero no encuentra quién lo firmó (falta la CA Intermedia o Root en el almacén).

¿Cómo valido la cadena con OpenSSL?

openssl verify -CAfile cadena-completa.pem server-vsotdcorerh.mi-empresa.mx.crt
UI Component: Glassmorphism Nav Menu
Older post

UI Component: Glassmorphism Nav Menu

Implementación de un menú de navegación flotante con efecto 'vidrio esmerilado', animaciones de estado activo fluidas y brillos de neón.

Newer post

Guía de Estilos: Generación de Imágenes con IA para Blogs Técnicos

Domina los prompts de Gemini y Banna: Desde diagramas isométricos limpios hasta portadas estilo Glassmorphism y Cyberpunk.

Guía de Estilos: Generación de Imágenes con IA para Blogs Técnicos