Skip to content

Latest commit

 

History

History
739 lines (597 loc) · 30.4 KB

File metadata and controls

739 lines (597 loc) · 30.4 KB

Comprendiendo los Certificados para Principiantes

🎈 ¡Bienvenido al Mundo de los Certificados!

Imagina que tienes 10 años y quieres entender qué son los certificados y cómo funcionan. ¡Piensa en los certificados como tarjetas de identificación especiales para computadoras y sitios web que demuestran que son quienes dicen ser!

🏠 ¿Qué Son los Certificados? (La Historia Simple)

🎭 La Analogía del Teatro

Piensa en internet como un gran teatro donde todos usan máscaras. ¿Cómo sabes si alguien es realmente quien dice ser?

Los certificados son como insignias de identificación especiales que prueban identidad:

  • 🎫 Tu boleto = Tu computadora/teléfono
  • 🏛️ La seguridad del teatro = Autoridad de Certificación (CA)
  • 🎭 Actores en el escenario = Sitios web y servidores
  • 🆔 Insignias de ID oficiales = Certificados digitales

¡Al igual que un guardia de seguridad en un teatro verifica las insignias de identificación, tu computadora verifica los certificados para asegurarse de que los sitios web son reales y seguros!

🔧 ¿Qué Hace Nuestro Script create-certificates.bat?

Nuestro script es como una fábrica de certificados que crea diferentes tipos de insignias de identificación para nuestro sistema. ¡Veamos qué produce!

📋 Proceso Paso a Paso

🏭 Paso 1: Configurando la Fábrica

# El script primero verifica si tiene las herramientas correctas:
- OpenSSL (máquina para hacer certificados)
- Java keytool (ayudante de certificados Android)
- certificates.conf (libro de recetas con todas las configuraciones)

🏛️ Paso 2: Creando la Autoridad de Certificación (CA)

¿Qué es una CA? Piensa en ella como la "Oficina de Insignias de Identificación" en la que todos confían (wms_ca.crt y wms_ca.key).

Archivos Creados:

  • wms_ca.key (2048 bits) - La Llave Maestra 🗝️
  • wms_ca.crt (3650 días = 10 años) - La Insignia de Identificación Maestra 🆔

Lo que sucede:

# Paso 2a: Crea una llave maestra super-secreta
openssl genrsa -aes256 -passout pass:wms_ca_password_2024 -out wms_ca.key 2048
# Crea: wms_ca.key (archivo de llave privada)
# Por qué: Necesitamos una llave secreta para firmar certificados más tarde

# Paso 2b: Crea el certificado maestro
openssl req -new -x509 -days 3650 -key wms_ca.key -out wms_ca.crt
# Requiere: wms_ca.key (creado en el paso 2a)
# Crea: wms_ca.crt (certificado público)
# Por qué necesitamos wms_ca.key: Para probar que poseemos este certificado y podemos firmar otros

Detalles Técnicos:

  • Tamaño de Llave: 2048 bits (seguridad muy fuerte, como una cerradura super-complicada)
  • Algoritmo: RSA con cifrado AES-256 (el tipo de cerradura más fuerte)
  • Validez: 10 años (cuánto tiempo permanece abierta la oficina de insignias)
  • Protegido por Contraseña: Sí (necesita una contraseña secreta para usarlo)

🌐 Paso 3: Creando el Certificado del Servidor Web

¿Qué es esto? La insignia de identificación especial para nuestro sitio web (wms.crt) para que los navegadores confíen en él.

Archivos Creados:

  • wms.key (2048 bits) - Llave Privada del Sitio Web 🔐
  • wms.csr - Formulario de Solicitud de Certificado 📝
  • wms.crt (365 días = 1 año) - Insignia de Identificación del Sitio Web 🌐
  • wms.conf - Instrucciones Especiales 📋

Lo que sucede:

# Paso 3a: Crea la llave privada del sitio web
openssl genrsa -aes256 -passout pass:wms_server_password_2024 -out wms.key 2048
# Crea: wms.key (llave privada del servidor)
# Por qué: El servidor necesita su propia llave secreta, separada de la CA

# Paso 3b: Crea una solicitud para una insignia de identificación
openssl req -new -key wms.key -out wms.csr -config wms.conf
# Requiere: wms.key (creado en el paso 3a) + wms.conf (archivo de configuración)
# Crea: wms.csr (solicitud de firma de certificado)
# Por qué necesitamos wms.key: Para probar que controlamos la llave privada del servidor
# Por qué necesitamos wms.conf: Contiene los detalles del servidor y extensiones de seguridad

# Paso 3c: La CA estampa la solicitud y crea la insignia oficial
openssl x509 -req -in wms.csr -CA wms_ca.crt -CAkey wms_ca.key -out wms.crt
# Requiere: wms.csr (del paso 3b) + wms_ca.crt (del paso 2) + wms_ca.key (del paso 2)
# Crea: wms.crt (certificado de servidor firmado)
# Por qué necesitamos wms.csr: Contiene la llave pública del servidor e información de identidad
# Por qué necesitamos wms_ca.crt: Muestra quién está firmando el certificado
# Por qué necesitamos wms_ca.key: Prueba que somos la CA legítima y podemos firmar certificados

Características Especiales (Subject Alternative Names):

  • Puede funcionar con: localhost, wms.local, *.wms.local
  • Puede funcionar con IPs: 127.0.0.1, 192.168.1.188, ::1
  • ¿Por qué? ¡Para que el mismo certificado funcione desde diferentes direcciones!

📱 Paso 4: Creando Certificados CA Específicos de Plataforma

¿Qué es esto? ¡Crear versiones especiales de nuestro certificado CA que Windows y Android puedan aceptar como si fueran Autoridades de Certificación reales como VeriSign o DigiCert!

La Transformación Mágica: Nuestro script toma el certificado CA principal (wms_ca.crt) y crea versiones específicas de plataforma que cada sistema operativo reconoce y en las que confía.

🪟 Creación del Certificado CA de Windows

Archivos Creados para Windows:

  • wms_ca.crt - Certificado CA X.509 Estándar 🏛️

Lo que lo hace especial para Windows:

# El certificado CA tiene estos atributos compatibles con Windows:
Subject: /C=US/ST=NewYork/L=NewYork/O=WMSRootCA/OU=CertificateAuthority/CN=WMSRootCA
Basic Constraints: CA:TRUE (Critical)
Key Usage: Certificate Sign, CRL Sign
Validity: 10 años (3650 días)

Cómo Windows lo reconoce como una CA real:

  1. Formato X.509 estándar - Windows entiende esto perfectamente
  2. Bandera CA:TRUE - Le dice a Windows "Puedo firmar otros certificados"
  3. Uso Certificate Sign - Permiso para actuar como Autoridad de Certificación
  4. Instalación en el almacén raíz - Cuando se instala en "Entidades de certificación raíz de confianza"

La Magia de Windows:

Cuando instalas wms_ca.crt en el almacén raíz de confianza de Windows:
✅ Windows lo trata exactamente como VeriSign, DigiCert, o cualquier CA comercial
✅ Cualquier certificado firmado por esta CA es automáticamente confiable
✅ Los navegadores (Chrome, Edge, Firefox) automáticamente confían en él
✅ Todas las aplicaciones de Windows automáticamente confían en él

📱 Creación del Certificado CA de Android

Archivos Creados para Android:

  • android_ca_system.pem - Certificado del almacén de usuario Android 📱
  • [hash].0 (como a1b2c3d4.0) - Certificado del almacén del sistema Android 🔒

Paso 4a: Creando android_ca_system.pem

# Simplemente copiar el certificado CA con un nombre compatible con Android
copy "wms_ca.crt" android_ca_system.pem
# Requiere: wms_ca.crt (del paso 2)
# Crea: android_ca_system.pem (copia idéntica con nombre diferente)
# Por qué necesitamos wms_ca.crt: Este es nuestro certificado CA en el que Android necesita confiar

Lo que hace especial a android_ca_system.pem:

  • Formato PEM - Formato de texto preferido de Android (android_ca_system.pem)
  • Nombre de archivo descriptivo - Ayuda a los usuarios a identificarlo durante la instalación (android_ca_system.pem)
  • Mismo contenido que wms_ca.crt - Solo renombrado para mayor claridad

Paso 4b: Creando el certificado con nombre hash

# Obtener el hash único del certificado
for /f %%i in ('openssl x509 -noout -hash -in "wms_ca.crt"') do set CERT_HASH=%%i
# Requiere: wms_ca.crt (del paso 2)
# Por qué: El sistema Android necesita calcular el hash para crear el nombre de archivo apropiado

# Copiar el certificado con el nombre de archivo hash (como a1b2c3d4.0)
copy "wms_ca.crt" "%CERT_HASH%.0"
# Requiere: wms_ca.crt (del paso 2) + CERT_HASH (calculado arriba)
# Crea: [hash].0 (como a1b2c3d4.0)
# Por qué necesitamos wms_ca.crt: Mismo contenido de certificado, solo renombrado para el almacén del sistema Android

¿Por qué este nombre de archivo hash extraño?

  • Requisito del sistema Android - Los certificados del sistema deben nombrarse por su hash
  • Identificación única - El hash asegura que no haya conflictos de nombres de archivos
  • Reconocimiento automático - Android automáticamente carga todos los archivos .0 en el directorio de certificados del sistema
  • Búsqueda rápida - Android puede encontrar rápidamente certificados por hash

La Magia de Android:

Instalación en el Almacén de Usuario (android_ca_system.pem):

Cuando se instala en el almacén de certificados de usuario Android:
✅ La mayoría de las aplicaciones confiarán en él (si están configuradas para confiar en certificados de usuario)
✅ Instalación fácil a través de Configuración
✅ El usuario puede eliminarlo en cualquier momento
❌ Algunas aplicaciones centradas en la seguridad ignoran los certificados de usuario

### ⛓️ Creando el Archivo de Cadena de Certificados

**Archivos Creados:**
- `wms_chain.crt` - **Cadena de certificados completa** ⛓️

**Lo que sucede:**
```bash
# Combinar certificado de servidor + certificado CA
copy "wms.crt" + "wms_ca.crt" wms_chain.crt
# Requiere: wms.crt (del paso 3) + wms_ca.crt (del paso 2)
# Crea: wms_chain.crt (cadena de certificados combinada)
# Por qué necesitamos wms.crt: El certificado del servidor (final de la cadena)
# Por qué necesitamos wms_ca.crt: El certificado CA (raíz de la cadena)
# Por qué combinar: Los navegadores necesitan la cadena completa para verificar la confianza

Por qué esto es necesario:

  • Ruta de confianza completa - Muestra la cadena completa del servidor a la raíz de confianza (wms_chain.crt)
  • Validación más rápida - Los clientes no necesitan recuperar certificados faltantes (wms_chain.crt)
  • Mejor compatibilidad - Algunos clientes requieren la cadena completa (wms_chain.crt)
  • Optimización de Apache - El servidor web puede enviar la cadena completa inmediatamente (wms_chain.crt)

📂 Inventario Completo de Archivos: Lo que Crea Nuestro Script

¡Veamos CADA archivo que crea nuestro script de certificados y entendamos qué hace cada uno!

🗂️ Todos los Archivos Creados por create-certificates.bat

Archivo Tamaño Propósito Plataforma ¿Mantener Secreto?
wms_ca.key ~1.7KB Llave privada CA Ambas 🔴 ALTO SECRETO
wms_ca.crt ~1.3KB Certificado CA Ambas 🟢 Compartir libremente
wms.key ~1.7KB Llave privada del servidor Windows 🔴 Mantener secreto
wms.csr ~1KB Solicitud de certificado Ambas 🟡 Se puede eliminar después
wms.crt ~1.3KB Certificado del servidor Windows 🟢 Compartir libremente
wms.conf ~500B Config OpenSSL Ambas 🟡 Se puede eliminar después
android_ca_system.pem ~1.3KB CA de usuario Android Android 🟢 Compartir libremente
[hash].0 ~1.3KB CA del sistema Android Android 🟢 Compartir libremente
wms_chain.crt ~2.6KB Cadena completa Windows 🟢 Compartir libremente

🔍 Análisis Detallado de Archivos

🗝️ wms_ca.key (La Llave Secreta Maestra)

Qué es:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQ...
...
-----END ENCRYPTED PRIVATE KEY-----

Detalles Técnicos:

  • Formato: Llave privada RSA codificada en PEM, cifrada con AES-256
  • Tamaño de Llave: 2048 bits (256 bytes de material de llave)
  • Cifrado: AES-256-CBC con derivación de llave PBKDF2
  • Contraseña: wms_ca_password_2024 (del archivo de configuración)
  • Propósito: Firma otros certificados para hacerlos confiables

Por qué es ALTO SECRETO:

  • Cualquiera con esta llave puede crear certificados confiables (wms_ca.key)
  • Podría suplantar cualquier sitio web si la tiene (wms_ca.key)
  • Como tener la llave maestra para crear identificaciones falsas (wms_ca.key)
  • ¡Almacenar en una bóveda, nunca compartir, nunca perder! (wms_ca.key)

🆔 wms_ca.crt (El Certificado Maestro)

Qué es:

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

Detalles Técnicos:

  • Formato: Certificado X.509 codificado en PEM
  • Validez: 10 años (3650 días)
  • Número de Serie: Identificador único generado aleatoriamente
  • Algoritmo de Firma: SHA-256 con RSA
  • Llave Pública: Llave pública RSA de 2048 bits (coincide con la llave privada)

Campos del Certificado:

Subject: C=US, ST=New York, L=New York, O=WMS Root CA, OU=Certificate Authority, CN=WMS Root CA
Issuer: C=US, ST=New York, L=New York, O=WMS Root CA, OU=Certificate Authority, CN=WMS Root CA
(Autofirmado: Subject = Issuer)

Extensiones:

Basic Constraints: CA:TRUE (Critical)
Key Usage: Certificate Sign, CRL Sign
Subject Key Identifier: [hash único]
Authority Key Identifier: [igual al Subject Key ID - autofirmado]

Por qué es compartible:

  • Contiene solo información pública (wms_ca.crt)
  • Muestra la llave pública, no la llave privada (wms_ca.crt)
  • Como mostrar tu tarjeta de identificación a alguien - seguro de compartir (wms_ca.crt)
  • Los clientes necesitan esto para verificar los certificados que firmas (wms_ca.crt)

🔐 wms.key (Llave Privada del Servidor)

Qué es:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8...
...
-----END PRIVATE KEY-----

Detalles Técnicos:

  • Formato: Llave privada RSA codificada en PEM (sin cifrar después del procesamiento del script)
  • Tamaño de Llave: 2048 bits
  • Originalmente Cifrada: Sí, pero frase de contraseña eliminada para Apache
  • Propósito: Prueba que el servidor es quien dice ser

El Proceso de Eliminación de la Frase de Contraseña:

# Original: llave cifrada con contraseña
openssl genrsa -aes256 -passout pass:wms_server_password_2024 -out wms.key 2048
# Crea: wms.key (cifrado con contraseña)

# Más tarde: eliminar la contraseña para Apache (a los servidores no les gusta escribir contraseñas)
openssl rsa -in wms.key -passin pass:wms_server_password_2024 -out wms.key.unencrypted
# Requiere: wms.key (versión cifrada)
# Crea: wms.key.unencrypted (versión sin contraseña)
# Por qué necesitamos la versión cifrada: Para descifrarla y eliminar la contraseña

Por qué mantenerlo secreto:

  • Cualquiera con esto puede suplantar tu servidor (wms.key)
  • Como alguien que roba la llave de tu casa (wms.key)
  • Solo tu servidor web debería tener acceso (wms.key)

📋 wms.csr (Solicitud de Firma de Certificado)

Qué es:

-----BEGIN CERTIFICATE REQUEST-----
MIICWjCCAUICAQAwFTETMBEGA1UEAwwKbXlkb21haW4uY29tMIIBIjANBgkqhkiG...
...
-----END CERTIFICATE REQUEST-----

Detalles Técnicos:

  • Formato: Solicitud de certificado PKCS#10 codificada en PEM
  • Contiene: Llave pública + información de identidad + extensiones solicitadas
  • Propósito: Pedir a la CA "Por favor hazme un certificado con estos detalles"

Lo que hay dentro:

Subject: C=US, ST=New York, L=New York, O=WMS Organization, CN=wms.local
Public Key: [llave pública RSA de 2048 bits]
Extensiones Solicitadas:
  - Subject Alternative Names: localhost, wms.local, *.wms.local, 127.0.0.1, etc.
  - Key Usage: Digital Signature, Key Encipherment
  - Extended Key Usage: Server Authentication

Se puede eliminar después del uso:

  • Solo se necesita durante la creación del certificado
  • Como una solicitud de empleo - no se necesita una vez que obtienes el trabajo
  • Seguro de eliminar después de que se crea wms.crt

🌐 wms.crt (Certificado del Servidor)

Qué es:

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

Detalles Técnicos:

  • Formato: Certificado X.509 codificado en PEM
  • Validez: 1 año (365 días)
  • Firmado por: wms_ca.crt (nuestra CA)
  • Propósito: Prueba la identidad del servidor wms.local

Campos del Certificado:

Subject: C=US, ST=New York, L=New York, O=WMS Organization, CN=wms.local
Issuer: C=US, ST=New York, L=New York, O=WMS Root CA, CN=WMS Root CA
(Firmado por nuestra CA, no autofirmado)

Extensiones Críticas:

Subject Alternative Name:
  DNS:localhost
  DNS:wms.local
  DNS:*.wms.local
  IP:127.0.0.1
  IP:192.168.1.188
  IP:::1
Key Usage: Digital Signature, Key Encipherment
Extended Key Usage: Server Authentication

Por qué el SAN es crucial:

  • Los navegadores verifican si el certificado coincide con la URL que estás visitando
  • Sin un SAN apropiado, obtienes advertencias de seguridad aterradoras
  • Nuestro certificado funciona con múltiples direcciones

📱 android_ca_system.pem (Certificado de Usuario Android)

Qué es:

# Contenido idéntico a wms_ca.crt, solo renombrado
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

Por qué el renombramiento:

  • Los usuarios de Android esperan la extensión .pem
  • El nombre de archivo descriptivo ayuda durante la instalación
  • Exactamente el mismo contenido que wms_ca.crt
  • Hace obvio que esto es para Android

🔒 [hash].0 (Certificado del Sistema Android)

Qué es:

# Mismo contenido que wms_ca.crt, nombre de archivo especial
# Ejemplo de nombre de archivo: a1b2c3d4.0
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

El Cálculo del Hash:

# Los certificados del sistema Android deben nombrarse por su hash de sujeto
openssl x509 -noout -hash -in wms_ca.crt
# Salida: a1b2c3d4 (ejemplo)
# Entonces el nombre de archivo se convierte en: a1b2c3d4.0

Por qué este nombramiento:

  • Requisito de Android para el almacén del sistema
  • El hash previene conflictos de nombres de archivos
  • Android reconoce automáticamente la extensión .0
  • Permite búsqueda rápida de certificados por hash

⛓️ wms_chain.crt (Cadena de Certificados Completa)

Qué es:

# Certificado del servidor primero
-----BEGIN CERTIFICATE-----
[contenido de wms.crt]
-----END CERTIFICATE-----
# Luego certificado CA
-----BEGIN CERTIFICATE-----
[contenido de wms_ca.crt]
-----END CERTIFICATE-----

Estructura:

Orden de la Cadena de Certificados (¡importante!):
1. Certificado de Entidad Final (wms.crt) - El certificado del servidor
2. CA Intermedia (ninguna en nuestro caso)
3. Certificado CA Raíz (wms_ca.crt) - Nuestro certificado CA

Por qué el orden importa:

  • Debe ir del certificado del servidor a la CA raíz
  • El orden incorrecto causa fallos de validación
  • Los clientes siguen la cadena eslabón por eslabón

🛠️ wms.conf (Configuración de OpenSSL)

Qué es:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = US
ST = New York
# ... más campos

[v3_req]
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = wms.local
# ... más entradas

Propósito:

  • Instrucciones para OpenSSL
  • Define las extensiones del certificado
  • Especifica los Subject Alternative Names
  • Se puede eliminar después de la creación del certificado

📁 Formatos de Archivo Explicados (Como Diferentes Idiomas)

🔤 Formatos de Certificados

Formato Extensión Qué Es Como...
PEM .pem, .crt, .key Formato de texto que puedes leer Una carta escrita en español
DER .der, .cer Formato binario que las computadoras aman Una carta escrita en código de computadora
P12/PFX .p12, .pfx Paquete con llave + certificado Un sobre sellado con ID + llave adentro
JKS .jks Almacén de llaves Java Una caja del tesoro Java
BKS .bks Almacén de llaves Android Una caja del tesoro Android

🔐 Información de Llaves

Nuestras Llaves Usan:

  • Algoritmo: RSA (el más común y confiable)
  • Tamaño de Llave: 2048 bits (muy seguro, recomendado por expertos)
  • Cifrado: AES-256 (protección de contraseña super fuerte)

¿Por qué 2048 bits? Piensa en ello como una cerradura con 2048 pines diferentes. ¡Para romperla, alguien tendría que probar 2^2048 combinaciones - eso es más que todos los átomos del universo!

🏠 Instalación de Certificados en Windows

🎯 Entendiendo el Almacén de Certificados de Windows

Windows tiene diferentes "cofres del tesoro" (almacenes) para certificados:

📦 Almacenes de Certificados

  • Personal 👤 - Tus certificados privados (como tu ID personal)
  • Entidades de certificación raíz de confianza 🏛️ - Las oficinas de insignias de identificación en las que confías
  • Entidades de certificación intermedias 🏢 - Oficinas de insignias de identificación auxiliares
  • Editores de confianza ✅ - Fabricantes de software en los que confías

🔧 Cómo Instalar el Certificado CA en Windows

Método 1: Instalación con Doble Clic (Manera Fácil)

1. 📁 Encuentra tu archivo wms_ca.crt
2. 🖱️ Haz doble clic en él
3. 🛡️ Haz clic en "Instalar certificado"
4. 🏪 Elige "Equipo local" (para todos los usuarios) o "Usuario actual" (solo para ti)
5. 📍 Selecciona "Colocar todos los certificados en el siguiente almacén"
6. 🏛️ Navega a "Entidades de certificación raíz de confianza"
7. ✅ Haz clic en "Aceptar" y "Finalizar"

Método 2: Línea de Comandos (Manera Avanzada)

# Importar certificado CA al almacén raíz de confianza
certlm.msc /add wms_ca.crt /store "Root"

# O usando PowerShell
Import-Certificate -FilePath "wms_ca.crt" -CertStoreLocation Cert:\LocalMachine\Root

🏗️ Creando una Cadena de Firma Personalizada en Windows

🎯 Requisitos para una Cadena de CA Personalizada

Lo que Necesitas:

  1. Certificado CA Raíz - El jefe supremo (tu wms_ca.crt)
  2. CA Intermedia (opcional) - Gerente intermedio
  3. Certificado de Entidad Final - El trabajador real (tu wms.crt)

📋 Creación de Cadena Personalizada Paso a Paso

1. Instalar la CA Raíz en el Almacén Raíz de Confianza:

# Debe estar en "Entidades de certificación raíz de confianza"
Import-Certificate -FilePath "wms_ca.crt" -CertStoreLocation Cert:\LocalMachine\Root

2. Instalar el Certificado del Servidor en el Almacén Personal:

# El certificado del servidor va en el almacén "Personal"
Import-Certificate -FilePath "wms.crt" -CertStoreLocation Cert:\LocalMachine\My

3. Verificar la Construcción de la Cadena:

# Verificar si Windows puede construir la cadena
Get-ChildItem Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*wms.local*"}

🔍 Por Qué Esto Funciona

Validación de la Cadena de Certificados:

[CA Raíz] wms_ca.crt (en el almacén Raíz de confianza)
    ↓ firmado por
[Certificado del Servidor] wms.crt (en el almacén Personal)
    ↓ usado por
[Tu Sitio Web] https://wms.local

Windows verifica:

  1. ✅ ¿Está el certificado del servidor firmado por una CA de confianza?
  2. ✅ ¿Está el certificado CA en el almacén Raíz de confianza?
  3. ✅ ¿Son válidas las fechas del certificado?
  4. ✅ ¿Coincide el certificado con el nombre del sitio web?

📱 Instalación de Certificados en Android

🤖 Entendiendo el Sistema de Certificados de Android

Android tiene dos niveles de almacenamiento de certificados:

📱 Almacén de Certificados de Usuario

  • Ubicación: Configuración > Seguridad > Cifrado y credenciales
  • Propósito: Las aplicaciones pueden elegir confiar o no en ellos
  • Seguridad: Media (las aplicaciones deciden qué hacer)
  • Fácil de Instalar: ¡Sí! ✅

🔒 Almacén de Certificados del Sistema

  • Ubicación: /system/etc/security/cacerts/
  • Propósito: TODAS las aplicaciones confían automáticamente en ellos
  • Seguridad: Alta (confianza automática para todo)
  • Fácil de Instalar: No, necesita acceso root 🔴

🎯 Instalación de Certificado de Usuario (Fácil)

📋 Proceso Paso a Paso

1. 📂 Copia android_ca_system.pem a tu teléfono
2. 📱 Ve a Configuración > Seguridad > Cifrado y credenciales
3. 📥 Toca "Instalar desde el almacenamiento" o "Instalar certificado"
4. 📁 Encuentra y selecciona android_ca_system.pem
5. 🏷️ Dale un nombre como "WMS CA"
6. 🔒 Elige "Certificado CA" cuando se te pregunte
7. ✅ Ingresa tu bloqueo de pantalla (PIN/contraseña/patrón)

⚠️ Comportamiento Importante de Android

Cambios de Seguridad de Android 7+:

  • Las aplicaciones dirigidas a API 24+ ignoran los certificados de usuario por defecto
  • Solución: La aplicación debe confiar explícitamente en los certificados de usuario
  • Nuestra aplicación: ¡Ya configurada para confiar en certificados de usuario! ✅

🏗️ Creando una Cadena de Firma Personalizada en Android

🎯 Requisitos de Cadena de Android

Lo que Android Necesita:

  1. CA Raíz en el almacén de certificados (usuario o sistema)
  2. Cadena de certificados completa en la respuesta del servidor
  3. Extensiones de certificado apropiadas (¡Crítico!)
  4. Coincidencia de nombre de host válida

📋 Extensiones de Certificado Necesarias

El Certificado CA Raíz Debe Tener:

Basic Constraints: CA:TRUE (Critical)
Key Usage: Certificate Sign, CRL Sign

El Certificado del Servidor Debe Tener:

Basic Constraints: CA:FALSE
Key Usage: Digital Signature, Key Encipherment
Extended Key Usage: Server Authentication
Subject Alternative Name: Nombres DNS e IPs

🔍 Por Qué Android Es Exigente

Proceso de Validación de Android:

1. 📱 La aplicación se conecta a https://wms.local
2. 🔍 El servidor envía la cadena de certificados: [wms.crt + wms_ca.crt]
3. 🔎 Android verifica: ¿Está wms_ca.crt en mi almacén de confianza?
4. ✅ ¿Encontrado en el almacén de usuario? Verificar si la app confía en certificados de usuario
5. ✅ ¿Encontrado en el almacén del sistema? Confianza automática
6. 🏷️ Verificar: ¿Coincide wms.crt con el nombre de host "wms.local"?
7. 📅 Verificar: ¿Siguen siendo válidos los certificados (no expirados)?
8. 🔐 Verificar: ¿Están presentes todas las extensiones requeridas?
9. ✅ ¿Todo bien? ¡Conexión permitida!

🔍 Solucionando Problemas Comunes

❌ Problemas Comunes de Windows

Problema: "No se pudo construir la cadena de certificados" Solución: Instalar el certificado CA en el almacén Raíz de confianza, no en el almacén Personal

Problema: "No coincide el nombre del certificado" Solución: Agregar el nombre de tu servidor a los Subject Alternative Names (SAN)

Problema: "Certificado expirado" Solución: Verificar la fecha/hora del sistema y las fechas de validez del certificado

❌ Problemas Comunes de Android

Problema: "Certificado no confiable" Solución: Instalar el certificado CA correctamente y asegurarse de que la aplicación confíe en certificados de usuario

Problema: "Falló la verificación del nombre de host" Solución: Asegurarse de que el SAN del certificado incluya la IP/nombre de host de tu servidor

Problema: "La aplicación ignora los certificados de usuario" Solución: La aplicación debe estar configurada para confiar en certificados de usuario (¡la nuestra lo está!)

🎓 Resumen: Lo que Aprendimos

🏆 Conceptos Clave

  • Certificados = Insignias de ID digitales que prueban identidad
  • Autoridad de Certificación = Oficina de insignias de identificación confiable que firma certificados
  • Llave Privada = Llave secreta que solo tú tienes
  • Certificado Público = Insignia de identificación que todos pueden ver
  • Cadena de Certificados = Cadena de confianza desde la CA raíz hasta tu certificado

📂 Archivos que Crea Nuestro Script

  1. wms_ca.key - Llave maestra secreta (¡mantén esto MUY seguro!)
  2. wms_ca.crt - Certificado maestro público (comparte esto con los clientes)
  3. wms.key - Llave secreta del servidor (¡mantén esto seguro!)
  4. wms.crt - Certificado público del servidor (Apache usa esto)
  5. android_ca_system.pem - Certificado CA compatible con Android
  6. [hash].0 - Certificado Android a nivel de sistema
  7. wms_chain.crt - Cadena de certificados completa

🛡️ Mejores Prácticas de Seguridad

  • Mantén las llaves privadas (archivos .key) secretas - ¡Nunca las compartas!
  • Usa contraseñas fuertes - Nuestro script usa buenos valores predeterminados
  • Renovación regular de certificados - Reemplaza antes de que expiren
  • Almacenamiento apropiado de certificados - El almacén correcto para el propósito correcto
  • Verifica las cadenas de certificados - Prueba que la confianza funciona

🚀 Próximos Pasos

  1. Ejecuta el script de certificados
  2. Instala el certificado CA en tus dispositivos
  3. Configura Apache para usar el certificado del servidor
  4. Prueba las conexiones HTTPS
  5. Monitorea las fechas de expiración de los certificados

¡Recuerda: Los certificados son como insignias de identificación para el mundo digital. Así como no confiarías en alguien sin una identificación apropiada en la vida real, las computadoras usan certificados para verificar con quién están hablando en línea! 🌐🔒

📚 Recursos Adicionales

🔗 Herramientas Útiles

  • OpenSSL: Creación y gestión de certificados
  • certmgr.msc: Administrador de certificados de Windows
  • certlm.msc: Administrador de certificados del equipo local
  • keytool: Herramienta de certificados Java/Android
  • ADB: Depuración de Android e instalación de certificados

📖 Lecturas Adicionales

¡Ahora entiendes los certificados como un profesional! 🎉