Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Capítulo 3: Resumen de Herramientas de Certificados en RHEL

Objetivo de Aprendizaje: Familiarízate con las herramientas esenciales para gestionar certificados en RHEL para que sepas qué herramienta usar para cada tarea.


3.1 Tu Caja de Herramientas de Certificados

Al trabajar con certificados en RHEL, usarás estas herramientas principales:

HerramientaUso PrincipalVersiones RHELCuándo Usar
opensslOperaciones de certificados, pruebasTodasGenerar claves/CSRs, inspeccionar certs, probar conexiones
certutilGestión de base de datos NSSTodasBDs de cert estilo Firefox/Mozilla
update-ca-trustGestión de almacén de confianzaTodasAgregar/eliminar CAs confiables
certmongerRenovación automáticaTodasRastrear y renovar certificados automáticamente
crypto-policiesSeguridad en todo el sistemaRHEL 8+Controlar versiones TLS y cifrados
getcertCLI de certmongerTodasSolicitar y gestionar certs rastreados
trustGestión de confianza P11-kitTodas (mejorado RHEL 8+)Operaciones avanzadas de confianza

3.2 OpenSSL - La Navaja Suiza

Disponible: Todas las versiones de RHEL Paquete: openssl

Diferencias de Versión

# Verificar tu versión
openssl version

# RHEL 7: OpenSSL 1.0.2k-26
# RHEL 8: OpenSSL 1.1.1k-14
# RHEL 9: OpenSSL 3.5.5-2
# RHEL 10: OpenSSL 3.5.5-2

Usos Comunes

#============================================#
# INSPECCIONAR CERTIFICADOS
#============================================#

# Ver detalles del certificado
openssl x509 -in cert.crt -noout -text

# Verificar expiración
openssl x509 -in cert.crt -noout -dates
openssl x509 -in cert.crt -noout -checkend 86400  # Verificar si expira en 24h

# Ver asunto del certificado
openssl x509 -in cert.crt -noout -subject -issuer


#============================================#
# GENERAR CLAVES
#============================================#

# Estilo RHEL 7 (aún funciona en todas las versiones)
openssl genrsa -out server.key 2048

# Estilo moderno RHEL 8+ (recomendado)
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048

# Clave EC RHEL 9+ (curva elíptica)
openssl genpkey -algorithm EC -out ec.key -pkeyopt ec_paramgen_curve:P-256


#============================================#
# CREAR CSR (Solicitud de Firma de Certificado)
#============================================#

# CSR básico
openssl req -new -key server.key -out server.csr \
  -subj "/C=US/ST=State/L=City/O=Organization/CN=server.example.com"

# CSR con SANs (¡requerido para navegadores modernos!)
openssl req -new -key server.key -out server.csr \
  -subj "/CN=server.example.com" \
  -addext "subjectAltName=DNS:server.example.com,DNS:www.example.com"


#============================================#
# PROBAR CONEXIONES
#============================================#

# Probar HTTPS
openssl s_client -connect server.example.com:443 -servername server.example.com

# Probar versión TLS específica
openssl s_client -connect server.example.com:443 -tls1_2
openssl s_client -connect server.example.com:443 -tls1_3

# Probar LDAPS
openssl s_client -connect ldap.example.com:636

# Probar SMTP con STARTTLS
openssl s_client -connect mail.example.com:25 -starttls smtp

Diferencias Específicas por Versión

RHEL 7 (OpenSSL 1.0.2k):

  • ✅ Estable y bien probado
  • ❌ Sin soporte TLS 1.3
  • ❌ Sintaxis de comando antigua

RHEL 8 (OpenSSL 1.1.1k):

  • ✅ Soporte TLS 1.3
  • ✅ Sintaxis de comando moderna
  • ✅ Mejores valores predeterminados

RHEL 9/10 (OpenSSL 3.5.5):

  • ✅ Arquitectura de proveedores
  • ✅ Soporte FIPS mejorado
  • ⚠️ Cambios en API (afecta apps personalizadas)
  • ⚠️ Algoritmos heredados requieren -provider legacy

3.3 certutil - Herramienta de Base de Datos NSS

Disponible: Todas las versiones de RHEL Paquete: nss-tools

Usado para bases de datos de certificados estilo Mozilla/Firefox.

Usos Comunes

#============================================#
# GESTIONAR BASE DE DATOS NSS
#============================================#

# Crear nueva base de datos
certutil -N -d /etc/pki/nssdb

# Listar certificados
certutil -L -d /etc/pki/nssdb

# Agregar certificado CA
certutil -A -n "My CA" -t "CT,C,C" -d /etc/pki/nssdb -i ca.crt

# Eliminar certificado
certutil -D -n "Certificate Name" -d /etc/pki/nssdb

# Exportar certificado
certutil -L -n "Certificate Name" -d /etc/pki/nssdb -a > exported.crt

Cuándo Usar certutil

  • Gestionar certificados de Firefox/Thunderbird
  • Trabajar con aplicaciones que usan NSS (muchos servicios Red Hat)
  • Cuando veas archivos .db en /etc/pki/nssdb/

3.4 update-ca-trust - Gestión del Almacén de Confianza

Disponible: Todas las versiones de RHEL Paquete: ca-certificates (instalado por defecto)

Gestiona qué Autoridades Certificadoras (CAs) confía tu sistema.

Cómo Funciona

Tus CAs Personalizadas
  ↓
/etc/pki/ca-trust/source/anchors/
  ↓
update-ca-trust extract
  ↓
/etc/pki/ca-trust/extracted/
  ├── pem/tls-ca-bundle.pem       (OpenSSL/Python/Ruby)
  ├── openssl/ca-bundle.trust.crt (Específico de OpenSSL)
  └── java/cacerts                (Aplicaciones Java)

Usos Comunes

#============================================#
# AGREGAR CA PERSONALIZADA
#============================================#

# Paso 1: Copiar certificado CA
sudo cp corporate-ca.crt /etc/pki/ca-trust/source/anchors/

# Paso 2: Actualizar almacén de confianza
sudo update-ca-trust extract

# ¡Eso es todo! Ahora todas las aplicaciones confían en esta CA


#============================================#
# ELIMINAR/PONER EN LISTA NEGRA CA (RHEL 8+)
#============================================#

# Poner en lista negra una CA comprometida
sudo cp compromised-ca.crt /etc/pki/ca-trust/source/blacklist/
sudo update-ca-trust extract


#============================================#
# VERIFICAR CONFIANZA
#============================================#

# Verificar si el certificado es confiable
openssl verify /path/to/cert.crt

# Listar todas las CAs confiables
trust list | grep "certificate-authority"

# Buscar CA específica
trust list | grep -i "Let's Encrypt"

Directorios Clave

/etc/pki/ca-trust/
├── source/
│   ├── anchors/          ← Agrega tus CAs confiables aquí
│   └── blacklist/        ← Lista negra de CAs (RHEL 8+)
└── extracted/
    ├── pem/              ← Usado por la mayoría de apps
    ├── openssl/          ← Específico de OpenSSL
    └── java/             ← Aplicaciones Java

3.5 certmonger - Renovación Automática de Certificados

Disponible: Todas las versiones de RHEL Paquete: certmonger

La herramienta “configúralo y olvídate” para certificados.

Qué Hace

certmonger:

  • Rastrea fechas de expiración de certificados
  • Renueva automáticamente antes de expirar
  • Funciona con múltiples CAs (IPA, Let’s Encrypt, externa)
  • Ejecuta comandos post-renovación (ej: reiniciar servicios)

Flujo de Trabajo Básico

#============================================#
# INSTALACIÓN
#============================================#

sudo dnf install certmonger
sudo systemctl enable --now certmonger


#============================================#
# SOLICITAR CERTIFICADO
#============================================#

# Desde FreeIPA
sudo ipa-getcert request \
  -f /etc/pki/tls/certs/web.crt \
  -k /etc/pki/tls/private/web.key \
  -D web.example.com \
  -K host/web.example.com@REALM

# Autofirmado (para pruebas)
sudo getcert request \
  -f /etc/pki/tls/certs/test.crt \
  -k /etc/pki/tls/private/test.key


#============================================#
# MONITOREAR CERTIFICADOS
#============================================#

# Listar todos los certificados rastreados
sudo getcert list

# Verificar certificado específico
sudo getcert list -f /etc/pki/tls/certs/web.crt

# Observar renovación
sudo journalctl -u certmonger -f

Características Clave por Versión

RHEL 7:

  • Rastreo y renovación básicos
  • Integración con IPA
  • Configuración manual

RHEL 8:

  • Integración mejorada con IPA
  • Mejor reporte de errores
  • Comandos post-guardado

RHEL 9:

  • Soporte ACME (¡Let’s Encrypt!)
  • Monitoreo mejorado
  • Mejor reporte de estado
# RHEL 9 - Integración con Let's Encrypt
sudo getcert request \
  -f /etc/pki/tls/certs/acme.crt \
  -k /etc/pki/tls/private/acme.key \
  -D example.com \
  -c acme-letsencrypt \
  -C "systemctl reload httpd"

3.6 crypto-policies - Seguridad en Todo el Sistema (RHEL 8+)

Disponible: Solo RHEL 8, 9, 10 Paquete: crypto-policies (instalado por defecto)

CAMBIO DE JUEGO: ¡Controla versiones TLS, cifrados y tamaños de clave en todo el sistema!

La Gran Idea

En lugar de configurar cada aplicación individualmente:

❌ FORMA ANTIGUA (RHEL 7):
- Configurar cifrados SSL de Apache
- Configurar cifrados SSL de NGINX
- Configurar ajustes TLS de Postfix
- Configurar ajustes TLS de OpenLDAP
- Configurar cada aplicación...

✅ FORMA NUEVA (RHEL 8+):
- Establecer UNA política del sistema
- ¡Todas las aplicaciones la siguen automáticamente!

Políticas Disponibles

# Verificar política actual
update-crypto-policies --show

# Políticas:
# DEFAULT  - Seguridad equilibrada (TLS 1.2+, RSA 2048+)
# LEGACY   - Modo de compatibilidad (permite TLS 1.0/1.1)
# FUTURE   - Seguridad más estricta (TLS 1.2+, RSA 3072+)
# FIPS     - Modo de cumplimiento federal

Comparación de Políticas

CaracterísticaLEGACYDEFAULTFUTUREFIPS
TLS 1.0/1.1✅ Permitido❌ Bloqueado❌ Bloqueado❌ Bloqueado
TLS 1.2✅ Sí✅ Sí✅ Sí✅ Sí
TLS 1.3✅ Sí✅ Sí✅ Sí✅ Sí
RSA Mín1024 bits2048 bits3072 bits2048 bits
Firmas SHA-1⚠️ Permitido❌ Bloqueado❌ Bloqueado❌ Bloqueado
Cifrado 3DES⚠️ Permitido❌ Bloqueado❌ Bloqueado❌ Bloqueado

Usos Comunes

#============================================#
# CAMBIAR POLÍTICA
#============================================#

# Establecer política FUTURE (más estricta)
sudo update-crypto-policies --set FUTURE
# Reiniciar o reiniciar servicios

# Usar temporalmente LEGACY (para sistemas antiguos)
sudo update-crypto-policies --set LEGACY
# Nota: ¡LEGACY debe ser temporal!


#============================================#
# POLÍTICAS PERSONALIZADAS (RHEL 9+)
#============================================#

# Subpolíticas - modificar política existente
sudo update-crypto-policies --set DEFAULT:NO-SHA1
sudo update-crypto-policies --set FUTURE:AD-SUPPORT


#============================================#
# RESOLVER PROBLEMAS DE POLÍTICA
#============================================#

# Si el servicio falla después del cambio de política:
# 1. Verificar política actual
update-crypto-policies --show

# 2. Verificar configuración de aplicación
cat /etc/crypto-policies/back-ends/opensslcnf.config

# 3. Probar con LEGACY temporalmente
sudo update-crypto-policies --set LEGACY
sudo systemctl restart <service>

Qué Controla crypto-policies

Configura automáticamente:

  • OpenSSL
  • GnuTLS
  • NSS
  • OpenJDK/Java
  • BIND
  • Kerberos
  • OpenSSH
  • ¡Y más!

Conclusión: Cambia un ajuste, actualiza la seguridad de todo el sistema. ¡Brillante!


3.7 Guía de Selección de Herramientas

“¿Qué herramienta debo usar?”

┌─────────────────────────────────────────────────────────────┐
│ ÁRBOL DE DECISIÓN DE HERRAMIENTAS DE CERTIFICADOS           │
└─────────────────────────────────────────────────────────────┘

Necesito...
│
├─ Inspeccionar un certificado
│  └─ Usar: openssl x509 -in cert.crt -noout -text
│
├─ Generar una clave/CSR
│  └─ Usar: openssl genpkey / openssl req
│
├─ Probar una conexión TLS
│  └─ Usar: openssl s_client -connect host:port
│
├─ Agregar una CA confiable en todo el sistema
│  └─ Usar: copiar a /etc/pki/ca-trust/source/anchors/
│          luego: update-ca-trust
│
├─ Renovar certificados automáticamente
│  └─ Usar: certmonger (getcert/ipa-getcert)
│
├─ Cambiar política TLS del sistema (RHEL 8+)
│  └─ Usar: update-crypto-policies --set <POLICY>
│
├─ Trabajar con bases de datos Firefox/NSS
│  └─ Usar: certutil
│
└─ Resolver problemas de certificados
   └─ Usar: ¡Metodología del Capítulo 27!

3.8 Matriz de Disponibilidad de Herramientas

HerramientaRHEL 7RHEL 8RHEL 9RHEL 10Notas
openssl1.0.2k1.1.1k3.5.53.5.5Herramienta principal
certutilHerramienta NSS
update-ca-trust✅ Mejorado✅ Mejorado✅ MejoradoGestión confianza
certmonger✅ Mejorado✅ ACME✅ ACMERenovación auto
crypto-policies✅ Subpolíticas✅ MejoradoPolítica sistema
getcertCLI certmonger
trust✅ BásicoHerramienta p11-kit

3.9 Verificación de Instalación

Verifica que tienes las herramientas esenciales:

#============================================#
# VERIFICAR HERRAMIENTAS INSTALADAS
#============================================#

# OpenSSL (debe estar instalado por defecto)
openssl version

# Herramientas NSS
rpm -q nss-tools || echo "Instalar con: sudo dnf install nss-tools"

# certmonger
rpm -q certmonger || echo "Instalar con: sudo dnf install certmonger"

# Verificar crypto-policies (solo RHEL 8+)
which update-crypto-policies &>/dev/null && \
  echo "Crypto-policies disponible: $(update-crypto-policies --show)" || \
  echo "Crypto-policies no disponible (RHEL 7 o anterior)"

3.10 Comandos de Referencia Rápida

# === OpenSSL ===
openssl version                          # Verificar versión
openssl x509 -in cert.crt -noout -text   # Inspeccionar certificado
openssl s_client -connect host:443       # Probar HTTPS

# === Almacén de Confianza ===
sudo cp ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust                     # Agregar CA confiable

# === certmonger ===
sudo getcert list                        # Listar certs rastreados
sudo getcert list -f /path/to/cert.crt   # Verificar cert específico
sudo journalctl -u certmonger -f         # Ver logs

# === Crypto-Policies (RHEL 8+) ===
update-crypto-policies --show            # Política actual
sudo update-crypto-policies --set <POL>  # Cambiar política

# === NSS ===
certutil -L -d /etc/pki/nssdb            # Listar certs NSS

3.11 ¿Qué Sigue?

Ahora que conoces las herramientas, aprenderás:

  • Capítulo 4: Conceptos básicos de criptografía
  • Capítulo 5: Entender certificados X.509
  • Capítulo 6: Inmersión Profunda en almacén de confianza RHEL
  • Capítulo 22: Dominio de certmonger (detallado)
  • Capítulo 23: Inmersión Profunda en Crypto-policies (detallado)

Tarjeta de Referencia Rápida

┌────────────────────────────────────────────────────────────┐
│ HOJA DE TRUCOS DE HERRAMIENTAS DE CERTIFICADOS RHEL        │
├────────────────────────────────────────────────────────────┤
│ Inspeccionar:  openssl x509 -in cert.crt -noout -text      │
│ Probar:        openssl s_client -connect host:443          │
│ Agregar CA:    cp ca.crt /etc/pki/ca-trust/source/anchors/ │
│                sudo update-ca-trust                        │
│ Renovar auto:  sudo getcert list                           │
│ Política:      update-crypto-policies --show  (RHEL 8+)    │
│ NSS:           certutil -L -d /etc/pki/nssdb               │
└────────────────────────────────────────────────────────────┘

Navegación del Capítulo