Configuración Manual de SSL/TLS con Certificados Propios

Introducción

Aunque Let's Encrypt proporciona certificados SSL/TLS gratuitos y automatizados, hay escenarios donde necesitas usar tus propios certificados. Las organizaciones pueden requerir certificados de Validación Extendida (EV) o Validación de Organización (OV) para mayor confianza, Autoridades de Certificación (CA) internas para redes privadas, certificados wildcard de proveedores comerciales, o certificados con períodos de validez más largos para requisitos específicos del negocio.

La configuración manual de SSL/TLS te da control completo sobre la generación, firma y deployment de certificados. Este enfoque es esencial para entornos empresariales, configuraciones de desarrollo/pruebas con certificados autofirmados, certificados comerciales multi-año, infraestructura interna no accesible desde internet, y requisitos de cumplimiento que requieren autoridades de certificación específicas.

Esta guía completa cubre todo lo que necesitas saber sobre configuración manual de certificados SSL/TLS. Aprenderás cómo generar Solicitudes de Firma de Certificado (CSR), crear certificados autofirmados para pruebas, instalar certificados SSL comerciales, configurar Apache y Nginx para HTTPS, implementar cadenas de certificados correctamente, solucionar problemas comunes de certificados y seguir mejores prácticas de seguridad. Ya sea que estés configurando un entorno de desarrollo o desplegando infraestructura SSL empresarial, esta guía proporciona la base para una gestión exitosa de certificados manuales.

Prerrequisitos

Antes de comenzar la configuración manual de SSL/TLS, asegúrate de tener:

  • Apache o Nginx instalado y ejecutándose en tu servidor Linux
  • Acceso root o sudo a tu servidor
  • OpenSSL instalado (preinstalado en la mayoría de distribuciones Linux)
  • Comprensión básica de conceptos SSL/TLS e Infraestructura de Clave Pública (PKI)
  • Un nombre de dominio registrado (para certificados de producción)
  • Firewall configurado para permitir tráfico HTTPS en puerto 443
  • Conocimiento de editor de texto para editar archivos de configuración
  • Comprensión de la configuración de virtual host o server block de tu servidor web

Entendiendo los Certificados SSL/TLS

Componentes del Certificado

Un certificado SSL/TLS contiene:

Información del Sujeto:

  • Common Name (CN): Nombre de dominio (ej., www.example.com)
  • Organization (O): Nombre de la empresa
  • Organizational Unit (OU): Departamento
  • Locality (L): Ciudad
  • State/Province (ST): Estado
  • Country (C): Código de país de dos letras

Elementos Técnicos:

  • Clave Pública: Usada para encriptación
  • Clave Privada: Debe mantenerse segura, usada para desencriptación
  • Firma: Firma digital de la CA
  • Período de Validez: Fechas de inicio y expiración
  • Número de Serie: Identificador único
  • Extensiones: Subject Alternative Names (SAN), Key Usage, etc.

Tipos de Certificados

Por Nivel de Validación:

  • Validación de Dominio (DV): Verifica solo la propiedad del dominio
  • Validación de Organización (OV): Verifica dominio y organización
  • Validación Extendida (EV): Máxima validación, muestra organización en navegador

Por Cobertura:

  • Dominio Único: Cubre un nombre de dominio completamente calificado
  • Wildcard: Cubre dominio y todos los subdominios (*.example.com)
  • Multi-Dominio (SAN): Cubre múltiples dominios específicos

Por Propósito:

  • Autofirmado: Para desarrollo/pruebas
  • CA Interna: Para redes privadas
  • CA Comercial: Para sitios web públicos

Instalando OpenSSL

OpenSSL típicamente viene preinstalado, pero verifica:

# Verificar versión de OpenSSL
openssl version

# Salida esperada:
# OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)

# Si no está instalado:
# Ubuntu/Debian
sudo apt update
sudo apt install openssl -y

# CentOS/Rocky/AlmaLinux
sudo yum install openssl -y  # o dnf

Creando Certificados Autofirmados

Los certificados autofirmados son perfectos para entornos de desarrollo y pruebas.

Generar Certificado Autofirmado (Comando Único)

# Crear directorio para certificados
sudo mkdir -p /etc/ssl/private
sudo mkdir -p /etc/ssl/certs

# Generar certificado autofirmado (válido por 365 días)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/example.com.key \
  -out /etc/ssl/certs/example.com.crt \
  -subj "/C=US/ST=California/L=San Francisco/O=Example Inc/OU=IT/CN=example.com"

Parámetros explicados:

  • req: Comando de solicitud de certificado
  • -x509: Crear certificado autofirmado
  • -nodes: No encriptar clave privada
  • -days 365: Válido por 365 días
  • -newkey rsa:2048: Generar clave RSA de 2048 bits
  • -keyout: Archivo de salida de clave privada
  • -out: Archivo de salida de certificado
  • -subj: Información del sujeto (no interactivo)

Generar Certificado Autofirmado (Interactivo)

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/example.com.key \
  -out /etc/ssl/certs/example.com.crt

Se te pedirá:

Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: California
Locality Name (eg, city) []: San Francisco
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Inc
Organizational Unit Name (eg, section) []: IT Department
Common Name (e.g. server FQDN or YOUR name) []: example.com
Email Address []: [email protected]

Certificado Autofirmado Wildcard

# Crear certificado wildcard para *.example.com
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/wildcard.example.com.key \
  -out /etc/ssl/certs/wildcard.example.com.crt \
  -subj "/C=US/ST=California/L=San Francisco/O=Example Inc/CN=*.example.com"

Certificado Autofirmado Multi-Dominio (SAN)

Crear archivo de configuración OpenSSL:

sudo nano /tmp/san.cnf

Agregar:

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req

[dn]
C = US
ST = California
L = San Francisco
O = Example Inc
OU = IT Department
CN = example.com

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = blog.example.com
DNS.4 = api.example.com

Generar certificado:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/private/example.com.key \
  -out /etc/ssl/certs/example.com.crt \
  -config /tmp/san.cnf \
  -extensions v3_req

Asegurar Clave Privada

Establecer permisos apropiados:

# La clave privada debe ser legible solo por root
sudo chmod 600 /etc/ssl/private/example.com.key

# El certificado puede ser legible por todos
sudo chmod 644 /etc/ssl/certs/example.com.crt

# Verificar permisos
ls -la /etc/ssl/private/example.com.key
ls -la /etc/ssl/certs/example.com.crt

Certificados Comerciales: Generación de CSR

Para certificados SSL comerciales, genera una Solicitud de Firma de Certificado (CSR).

Generar Clave Privada y CSR

# Generar clave privada (RSA de 2048 bits)
sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048

# Generar CSR
sudo openssl req -new \
  -key /etc/ssl/private/example.com.key \
  -out /tmp/example.com.csr \
  -subj "/C=US/ST=California/L=San Francisco/O=Example Inc/OU=IT/CN=example.com/[email protected]"

Generar CSR Interactivamente

sudo openssl req -new \
  -key /etc/ssl/private/example.com.key \
  -out /tmp/example.com.csr

Responde las preguntas cuidadosamente (la información aparecerá en el certificado):

Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: California
Locality Name (eg, city) []: San Francisco
Organization Name (eg, company) []: Example Inc
Organizational Unit Name (eg, section) []: IT Department
Common Name (e.g. server FQDN or YOUR name) []: example.com
Email Address []: [email protected]

Please enter the following 'extra' attributes:
A challenge password []: [Dejar en blanco]
An optional company name []: [Dejar en blanco]

Generar CSR para Certificado Wildcard

sudo openssl req -new \
  -key /etc/ssl/private/wildcard.example.com.key \
  -out /tmp/wildcard.example.com.csr \
  -subj "/C=US/ST=California/L=San Francisco/O=Example Inc/CN=*.example.com"

Generar CSR para Certificado Multi-Dominio (SAN)

Crear archivo de configuración:

sudo nano /tmp/san_csr.cnf

Agregar:

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req

[dn]
C = US
ST = California
L = San Francisco
O = Example Inc
OU = IT Department
CN = example.com

[v3_req]
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
DNS.3 = blog.example.com
DNS.4 = api.example.com
DNS.5 = shop.example.com

Generar CSR:

# Generar clave privada primero
sudo openssl genrsa -out /etc/ssl/private/example.com.key 2048

# Generar CSR con SAN
sudo openssl req -new \
  -key /etc/ssl/private/example.com.key \
  -out /tmp/example.com.csr \
  -config /tmp/san_csr.cnf

Ver Contenido de CSR

# Ver detalles del CSR
sudo openssl req -text -noout -in /tmp/example.com.csr

# Ver nombres alternativos de sujeto
sudo openssl req -text -noout -in /tmp/example.com.csr | grep -A 5 "Subject Alternative Name"

Enviar CSR a Autoridad de Certificación

  1. Copiar contenido del CSR:
cat /tmp/example.com.csr
  1. Enviar a CA (Digicert, Sectigo, GlobalSign, etc.)
  2. Completar validación de dominio (email, DNS, o HTTP)
  3. Descargar certificado firmado de la CA
  4. Guardar certificado como /etc/ssl/certs/example.com.crt

Instalando Certificados SSL Comerciales

Estructura de Cadena de Certificados

Los certificados comerciales vienen con:

  • Certificado Primario: Tu certificado de dominio (example.com.crt)
  • Certificado(s) Intermedio(s): Certificados intermedios de CA
  • Certificado Raíz: Certificado raíz de CA (usualmente en navegador)

Combinar Cadena de Certificados

La mayoría de servidores web necesitan certificado + cadena intermedia:

# Método 1: Concatenar archivos
cat /tmp/example.com.crt /tmp/intermediate.crt > /etc/ssl/certs/example.com-fullchain.crt

# Método 2: Si CA proporciona bundle
cat /tmp/example.com.crt /tmp/ca-bundle.crt > /etc/ssl/certs/example.com-fullchain.crt

# Método 3: Creación manual
sudo nano /etc/ssl/certs/example.com-fullchain.crt

Agregar en este orden:

-----BEGIN CERTIFICATE-----
[Tu Certificado de Dominio]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Certificado Intermedio 1]
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
[Certificado Intermedio 2 si existe]
-----END CERTIFICATE-----

Verificar Cadena de Certificados

# Verificar certificado
sudo openssl x509 -in /etc/ssl/certs/example.com.crt -text -noout

# Verificar que la clave privada coincide con el certificado
sudo openssl rsa -in /etc/ssl/private/example.com.key -check
sudo openssl x509 -noout -modulus -in /etc/ssl/certs/example.com.crt | openssl md5
sudo openssl rsa -noout -modulus -in /etc/ssl/private/example.com.key | openssl md5
# Los hashes MD5 deben coincidir

# Verificar cadena de certificados
sudo openssl verify -CAfile /etc/ssl/certs/ca-bundle.crt /etc/ssl/certs/example.com.crt

Configuración SSL/TLS de Apache

Configuración Apache en Ubuntu/Debian

Habilitar módulo SSL:

sudo a2enmod ssl
sudo systemctl restart apache2

Crear virtual host SSL:

sudo nano /etc/apache2/sites-available/example.com-ssl.conf

Agregar configuración:

<VirtualHost *:443>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin [email protected]

    DocumentRoot /var/www/example.com/html

    # SSL Engine
    SSLEngine on

    # Archivos de certificado
    SSLCertificateFile /etc/ssl/certs/example.com.crt
    SSLCertificateKeyFile /etc/ssl/private/example.com.key

    # Si se usa certificado intermedio separado
    SSLCertificateChainFile /etc/ssl/certs/intermediate.crt

    # O si se usa cadena completa
    # SSLCertificateFile /etc/ssl/certs/example.com-fullchain.crt

    # Configuración SSL moderna
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
    SSLHonorCipherOrder off
    SSLSessionTickets off

    # OCSP Stapling
    SSLUseStapling On
    SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

    # Cabeceras de seguridad
    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        Header always set X-Frame-Options "SAMEORIGIN"
        Header always set X-Content-Type-Options "nosniff"
        Header always set X-XSS-Protection "1; mode=block"
    </IfModule>

    <Directory /var/www/example.com/html>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example-ssl-error.log
    CustomLog ${APACHE_LOG_DIR}/example-ssl-access.log combined
</VirtualHost>

# Redirección HTTP a HTTPS
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    Redirect permanent / https://example.com/
</VirtualHost>

Habilitar sitio y recargar:

sudo a2ensite example.com-ssl.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Configuración Apache en CentOS/Rocky/AlmaLinux

Instalar mod_ssl:

sudo yum install mod_ssl -y  # o dnf

Crear virtual host SSL:

sudo nano /etc/httpd/conf.d/example.com-ssl.conf

Agregar la misma configuración que Ubuntu (ajustar rutas si es necesario).

Probar y recargar:

sudo httpd -t
sudo systemctl reload httpd

Configuración SSL/TLS de Nginx

Configuración Nginx en Ubuntu/Debian

Crear server block SSL:

sudo nano /etc/nginx/sites-available/example.com-ssl

Agregar configuración:

# Server block HTTPS
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm;

    # Certificados SSL
    ssl_certificate /etc/ssl/certs/example.com-fullchain.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    # Configuración SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Caché de sesión SSL
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;

    # OCSP stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/certs/ca-bundle.crt;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    # Cabeceras de seguridad
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;

    # Parámetro Diffie-Hellman para suites DHE
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        try_files $uri $uri/ =404;
    }

    access_log /var/log/nginx/example-ssl-access.log;
    error_log /var/log/nginx/example-ssl-error.log;
}

# Redirección HTTP a HTTPS
server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    return 301 https://$server_name$request_uri;
}

Generar parámetros Diffie-Hellman (una vez, toma varios minutos):

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Habilitar y recargar:

sudo ln -s /etc/nginx/sites-available/example.com-ssl /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Configuración Nginx en CentOS/Rocky/AlmaLinux

Crear configuración:

sudo nano /etc/nginx/conf.d/example.com-ssl.conf

Agregar la misma configuración que Ubuntu, luego:

sudo nginx -t
sudo systemctl reload nginx

Renovación de Certificados

Proceso Manual de Renovación

Cuando el certificado expira:

  1. Generar nuevo CSR (se puede reutilizar clave privada):
sudo openssl req -new \
  -key /etc/ssl/private/example.com.key \
  -out /tmp/example.com-renewal.csr \
  -subj "/C=US/ST=California/L=San Francisco/O=Example Inc/CN=example.com"
  1. Enviar CSR a CA
  2. Descargar nuevo certificado
  3. Instalar nuevo certificado:
sudo cp /tmp/example.com-new.crt /etc/ssl/certs/example.com.crt
  1. Recargar servidor web:
sudo systemctl reload apache2  # o nginx

Verificar Expiración de Certificado

# Verificar fecha de expiración del certificado
sudo openssl x509 -in /etc/ssl/certs/example.com.crt -noout -enddate

# Verificar detalles del certificado
sudo openssl x509 -in /etc/ssl/certs/example.com.crt -text -noout

# Verificar días hasta expiración
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

Script de Monitoreo de Expiración

sudo nano /usr/local/bin/check-ssl-expiry.sh

Agregar:

#!/bin/bash
CERT="/etc/ssl/certs/example.com.crt"
EXPIRY=$(openssl x509 -enddate -noout -in "$CERT" | cut -d= -f2)
EXPIRY_EPOCH=$(date -d "$EXPIRY" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_EPOCH - $NOW_EPOCH) / 86400 ))

if [ $DAYS_LEFT -lt 30 ]; then
    echo "WARNING: SSL certificate expires in $DAYS_LEFT days!"
    # Enviar alerta por correo
    echo "Certificate expires in $DAYS_LEFT days" | mail -s "SSL Certificate Warning" [email protected]
else
    echo "SSL certificate is valid for $DAYS_LEFT more days"
fi

Hacer ejecutable y agregar a cron:

sudo chmod +x /usr/local/bin/check-ssl-expiry.sh
sudo crontab -e

Agregar:

0 0 * * * /usr/local/bin/check-ssl-expiry.sh

Probando Configuración SSL/TLS

Pruebas por Línea de Comandos

# Probar conexión SSL
openssl s_client -connect example.com:443 -servername example.com

# Verificar cadena de certificados
openssl s_client -connect example.com:443 -showcerts

# Probar protocolo específico
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3

# Probar cipher
openssl s_client -connect example.com:443 -cipher 'ECDHE-RSA-AES128-GCM-SHA256'

# Diagnóstico completo
curl -I https://example.com

Herramientas de Prueba en Línea

Pruebas Locales en Navegador

Acceder a https://example.com y verificar:

  • Certificado válido (icono de candado verde)
  • Detalles del certificado muestran información correcta
  • Sin advertencias de contenido mixto
  • Todos los recursos cargados vía HTTPS

Solución de Problemas

Certificado No Confiable

Síntomas: Navegador muestra "No Seguro" o advertencia de certificado

Soluciones:

  1. Verificar cadena de certificados:
openssl verify -CAfile /etc/ssl/certs/ca-bundle.crt /etc/ssl/certs/example.com.crt
  1. Asegurar uso de fullchain:
# Verificar si el archivo de certificado incluye cadena
sudo openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/example.com.crt | openssl pkcs7 -print_certs -noout
  1. Verificar certificados intermedios instalados

Desajuste de Clave Privada

Síntomas: Servidor web no inicia o errores SSL

Solución:

# Verificar que la clave coincide con el certificado
sudo openssl x509 -noout -modulus -in /etc/ssl/certs/example.com.crt | openssl md5
sudo openssl rsa -noout -modulus -in /etc/ssl/private/example.com.key | openssl md5
# Los hashes MD5 deben coincidir

Errores de Permisos

Síntomas: Servidor web no puede leer archivos de certificado

Solución:

# Arreglar permisos
sudo chmod 644 /etc/ssl/certs/example.com.crt
sudo chmod 600 /etc/ssl/private/example.com.key
sudo chown root:root /etc/ssl/private/example.com.key

# Verificar
ls -la /etc/ssl/private/example.com.key
ls -la /etc/ssl/certs/example.com.crt

Advertencias de Contenido Mixto

Síntomas: Página HTTPS carga recursos HTTP

Solución:

  • Actualizar todas las URLs de recursos a HTTPS o URLs relativas
  • Verificar URLs HTTP hardcodeadas en HTML, CSS, JavaScript
  • Usar cabecera Content-Security-Policy para detectar problemas

Certificado Expirado

Síntomas: Navegador muestra error de certificado expirado

Solución:

# Verificar expiración
sudo openssl x509 -in /etc/ssl/certs/example.com.crt -noout -enddate

# Renovar certificado (ver sección Renovación de Certificados)

Mejores Prácticas de Seguridad

Clave Privada Fuerte

# Generar clave RSA fuerte de 4096 bits
sudo openssl genrsa -out /etc/ssl/private/example.com.key 4096

# O usar ECDSA (más pequeña, más rápida, igualmente segura)
sudo openssl ecparam -genkey -name secp384r1 -out /etc/ssl/private/example.com-ecc.key

Almacenamiento Seguro de Clave Privada

# Permisos restrictivos
sudo chmod 600 /etc/ssl/private/example.com.key
sudo chown root:root /etc/ssl/private/example.com.key

# Nunca hacer commit a control de versiones
# Agregar a .gitignore:
echo "*.key" >> .gitignore

# Respaldo encriptado
tar -czf - /etc/ssl/private/ | openssl enc -aes-256-cbc -out ssl-backup.tar.gz.enc

Actualizaciones Regulares

  • Monitorear fechas de expiración de certificados
  • Renovar certificados antes de la expiración
  • Actualizar configuración SSL/TLS para últimos estándares de seguridad
  • Revisar y actualizar suites de cifrado regularmente

Transparencia de Certificados

Verificar certificado en logs CT:

# Consultar logs CT
curl -s "https://crt.sh/?q=example.com&output=json" | jq

Resumen de Mejores Prácticas

Gestión de Certificados

  • Generar claves privadas fuertes (mínimo 2048 bits, recomendado 4096 bits)
  • Asegurar claves privadas con permisos restrictivos (600)
  • Mantener claves privadas encriptadas al hacer respaldos
  • Nunca compartir claves privadas
  • Usar claves separadas para diferentes dominios/servicios

Configuración

  • Deshabilitar SSLv3, TLS 1.0 y TLS 1.1
  • Usar suites de cifrado modernas
  • Habilitar OCSP stapling
  • Implementar cabeceras HSTS
  • Habilitar HTTP/2

Monitoreo

  • Configurar alertas de expiración (30 días antes)
  • Pruebas SSL regulares con herramientas en línea
  • Monitorear logs de transparencia de certificados
  • Mantener documentación actualizada
  • Probar renovaciones antes de la expiración

Conclusión

La configuración manual de SSL/TLS proporciona control completo sobre tu infraestructura de certificados. Esta guía ha cubierto certificados autofirmados para desarrollo, instalación de certificados comerciales, configuración apropiada de cadenas, configuración de servidores web para Apache y Nginx, procesos de renovación de certificados y solución completa de problemas.

Puntos clave:

  • Los certificados autofirmados son perfectos para desarrollo y pruebas
  • Los certificados comerciales requieren generación apropiada de CSR e instalación de cadenas
  • La configuración fuerte de SSL/TLS es esencial para seguridad
  • El monitoreo regular previene problemas de expiración de certificados
  • La gestión apropiada de claves privadas es crítica para seguridad

Implementa configuraciones robustas de SSL/TLS para proteger datos de usuarios, construir confianza y cumplir requisitos de compliance. Continúa explorando temas avanzados como certificate pinning, registros DNS CAA, gestión de certificados multi-dominio y sistemas de renovación automatizada para entornos empresariales. Siempre sigue mejores prácticas de seguridad y mantén tus configuraciones SSL/TLS actualizadas para protección óptima.