Certificados SSL/TLS para Web

Seguridad y Configuración DNS

Presentado por:

  • Daniel Eduardo Dominguez Montoya
  • Maria Fernanda De la Cruz Gonzalez
  • Jonathan Alejandro Rios Lira
SSL/TLS

¿Qué es SSL/TLS?

Definición

SSL (Secure Sockets Layer) y TLS (Transport Layer Security) son protocolos de seguridad que crean una conexión cifrada entre un servidor web y un navegador.

  • Protege datos sensibles (contraseñas, tarjetas de crédito)
  • Verifica la identidad del sitio web
  • Mejora el SEO (Google solamente muestra sitios con HTTPS en su buscador)

Nota: TLS es la evolución moderna de SSL, pero comúnmente se usa "SSL" para referirse a ambos.

SSL y TLS

HTTP vs HTTPS

La Diferencia Crucial

HTTP (HyperText Transfer Protocol):

  • Datos viajan en texto plano
  • Vulnerable a interceptación
  • No verifica identidad del servidor

HTTPS (HTTP Secure):

  • Datos cifrados con SSL/TLS
  • Protege contra ataques man-in-the-middle
  • Autenticación del servidor mediante certificado
HTTP vs HTTPS

¿Cómo Funciona SSL/TLS?

Proceso de Handshake

  • Cliente saluda: El navegador solicita conexión segura al servidor
  • Servidor responde: Envía su certificado SSL con clave pública
  • Verificación: El navegador verifica el certificado con la Autoridad Certificadora
  • Cifrado: Se establece conexión cifrada usando claves simétricas

Todo sucede en milisegundos y es transparente para el usuario

Funcionamiento SSL

Tipos de Certificados SSL/TLS

Por Nivel de Validación

  • DV - Domain Validation: Valida solo el dominio | Emisión rápida (minutos) | Económico
  • OV - Organization Validation: Valida dominio + organización | Emisión media (días) | Precio medio
  • EV - Extended Validation: Validación exhaustiva | Emisión larga (semanas) | Más costoso
Tipos SSL

Tipos por Cobertura de Dominios

  • Single Domain: Protege un solo dominio (ejemplo.com)
  • Wildcard: Protege un dominio + todos sus subdominios (*.ejemplo.com)
  • Multi-Domain (SAN): Protege múltiples dominios diferentes en un solo certificado

Ejemplo Wildcard: Un certificado para *.ejemplo.com protege blog.ejemplo.com, tienda.ejemplo.com, etc.

Cobertura SSL

Sistema de Nombres de Dominio (DNS)

¿Qué es DNS?

El DNS es como la "agenda telefónica de Internet". Traduce nombres de dominio legibles a direcciones IP.

  • Escribes www.google.com en tu navegador
  • Tu computadora consulta un servidor DNS
  • El DNS devuelve la IP (ejemplo: 142.250.185.46)
  • Tu navegador se conecta a esa IP

Sin DNS: Tendrías que memorizar direcciones IP como 142.250.185.46 en lugar de google.com

DNS

Tipos de Registros DNS

Registros Más Comunes

Tipo Nombre (Ejemplo) Valor (Ejemplo) Descripción
A ejemplo.com
www.ejemplo.com
192.0.2.1 Apunta a una dirección IPv4. Es el más común para sitios web.
AAAA ejemplo.com 2001:0db8::1 Apunta a una dirección IPv6. Versión moderna para más direcciones disponibles.
CNAME www.ejemplo.com
blog.ejemplo.com
ejemplo.com Crea un alias a otro dominio. No se puede usar en dominio raíz.
MX ejemplo.com mail.ejemplo.com
Prioridad: 10
Especifica el servidor de correo para recibir emails del dominio.
TXT ejemplo.com
_dmarc.ejemplo.com
"v=spf1 include:..." Texto arbitrario. Usado para verificaciones (SPF, DKIM, DMARC, Google, etc).
NS ejemplo.com ns1.proveedor.com
ns2.proveedor.com
Define los servidores DNS autoritativos del dominio.
SRV _sip._tcp.ejemplo.com 10 60 5060 sipserver.ejemplo.com Define servicios específicos (VoIP, chat, etc). Incluye prioridad, peso, puerto y destino.
PTR 1.2.0.192.in-addr.arpa ejemplo.com Resuelve una IP a un nombre de dominio (usado en DNS reverso).
CAA ejemplo.com 0 issue "letsencrypt.org" Indica qué autoridades certificadoras pueden emitir certificados SSL para el dominio.

¿Qué es el TTL?

Time To Live

El TTL define cuánto tiempo (en segundos) los servidores DNS deben almacenar en caché un registro antes de consultarlo nuevamente.

  • TTL Bajo (300-600s): Cambios rápidos, mayor carga en DNS
  • TTL Medio (3600s): Equilibrio entre flexibilidad y rendimiento
  • TTL Alto (86400s): Menos consultas, cambios tardan más en propagarse

Ejemplo práctico: Si cambias la IP de tu servidor, un TTL de 3600s significa que puede tardar hasta 1 hora en actualizarse en todos los DNS.

TTL

Configuración en Entorno Local

Certificados SSL/TLS en Entorno Local

Desarrollo y Pruebas

Antes de implementar en producción, es recomendable configurar un entorno de pruebas local:

  • Desarrollo seguro: Simular HTTPS en local
  • Pruebas completas: Detectar problemas
  • Aprendizaje: Entender el proceso sin riesgos
Advertencia: Los certificados autofirmados generan advertencias de seguridad en los navegadores. Son solo para desarrollo y pruebas, no para sitios de producción.
Desarrollo Local SSL

Crear Certificado SSL Autofirmado

Generando Certificado con OpenSSL

El primer paso es generar un certificado autofirmado usando OpenSSL:

  • req -x509: Solicita certificado X.509
  • -nodes: Sin cifrado (No DES)
  • -days 365: Válido por un año
  • -newkey rsa:2048: Nueva clave RSA de 2048 bits
  • -keyout: Especifica el archivo de salida para la clave privada
  • -out: Especifica el archivo de salida para el certificado

Este comando generará tanto la clave privada (.key) como el certificado (.crt) en un solo paso.

Configurar Permisos de Seguridad

Protección de Archivos SSL

Es importante establecer los permisos adecuados para los archivos del certificado:

  • Clave privada: Solo lectura para el propietario (600)
  • Certificado: Lectura para todos (644)
¿Por qué estos permisos? La clave privada debe ser accesible solo por el servidor web, mientras que el certificado puede ser leído por cualquier proceso.

Configurar Virtual Host NGINX

Archivo de Configuración del Sitio

A continuación, creamos un archivo de configuración para nuestro dominio de desarrollo:

  • Puerto 80: Redirección a HTTPS
  • Puerto 443: Configuración SSL con nuestro certificado
  • Protocolos seguros: TLSv1.2 y TLSv1.3
  • Comando para crear VirtualHost: sudo nano /etc/nginx/conf.d/danieldominio.com.conf

Esta configuración es similar a la de producción, pero usando certificados autofirmados.

Preparar Directorio de la Web

Crear Estructura de Archivos

Necesitamos crear un directorio para nuestro sitio y asignarle los permisos adecuados:

  • mkdir -p: Crear estructura de directorios completa
  • chown -R: Asignar propietario recursivamente

El servidor web necesita permisos de escritura en este directorio para poder servir los archivos correctamente.

Configurar Archivo Hosts Local

Resolución de Nombres Local

Para simular un dominio real, editamos el archivo hosts del sistema anfitrión:

  • IP local: La dirección de nuestra máquina virtual
  • Dominio: Nombre de dominio ficticio para desarrollo
Importante: Esta configuración solo afecta a tu máquina local, no a Internet.

Reiniciar NGINX y Probar

Aplicar Cambios y Verificar

Finalmente, reiniciamos NGINX para aplicar la configuración y probamos nuestro sitio:

  • Accedemos al dominio configurado vía HTTPS
  • Veremos una advertencia de certificado no confiable
Nota: La advertencia es normal con certificados autofirmados esto debido a la falta de una autoridad de certificación confiable. En producción, usaremos certificados de autoridades reconocidas como Let's Encrypt.
Advertencia de seguridad

Configuración en Producción

Configurando DNS: Registro tipo A

Ejemplo práctico y razones

  • Tipo: A
    El tipo A apunta tu dominio a una dirección IPv4, ideal para nuestro sitio web.
  • Nombre: *
    El asterisco permite que cualquier subdominio (por ejemplo, blog.tusitio.com) apunte a la misma IP. Útil para redirección global o landing.
  • Valor: 192.0.2.1
    Aquí va la IP de tu servidor. Así los visitantes llegan al sitio correcto.
  • TTL: 3600
    TTL bajo (3600 segundos = 1 hora) permite que los cambios se propaguen más rápido en Internet.

¿Por qué así? Usar * como nombre es útil si quieres que todos los subdominios apunten a la misma IP, el tipo A es el estándar para IPv4, y TTL bajo te ayuda a ver los cambios pronto si necesitas ajustar la configuración.

Configuración de DNS en GoDaddy

Instalación de Certbot - Preparación

Configuración Inicial (Centos/Rocky Linux/AlmaLinux)

Antes de instalar Certbot, necesitamos habilitar los repositorios necesarios:

  • EPEL Release: Repositorio con paquetes adicionales.
    EPEL (Extra Packages for Enterprise Linux) es un repositorio mantenido por la comunidad que ofrece software extra y actualizado para distribuciones basadas en RHEL, como CentOS, Rocky Linux y AlmaLinux. Permite instalar herramientas que no están en los repositorios oficiales.
  • CRB (CodeReady Builder): Repositorio para dependencias de desarrollo.
    CRB (CodeReady Builder) contiene paquetes y librerías necesarias para compilar, desarrollar y ejecutar software adicional en sistemas Enterprise Linux. Es esencial para instalar ciertas aplicaciones y dependencias modernas.

Estos comandos son esenciales para poder instalar Certbot correctamente

Configuración del VirtualHost - NGINX

Configuración HTTP y HTTPS

Configuramos NGINX con dos bloques de servidor:

  • HTTP (Puerto 80): Redirige automáticamente a HTTPS
  • HTTPS (Puerto 443): Conexión segura con SSL/TLS
  • Certificado: Aprobado Let's Encrypt
  • Protocolos: TLSv1.2 y TLSv1.3

Ubicación: /etc/nginx/conf.d/viernesbotanero.online.conf

Instalación de Certbot para NGINX

Instalar Certbot

Una vez configurados los repositorios, instalamos Certbot con el plugin de NGINX:

  • certbot: Cliente para Let's Encrypt
  • python3-certbot-nginx: Plugin que modifica automáticamente la configuración de NGINX

Este paquete automatiza la configuración SSL en NGINX

Obtener Certificado SSL con Certbot

Generar e Instalar Certificado

Ejecutamos Certbot para obtener e instalar el certificado automáticamente:

  • --nginx: Usa el plugin de NGINX
  • -d: Especifica el dominio
  • -v: Modo verbose (muestra detalles del proceso)

¡Certbot configurará automáticamente NGINX con SSL!

El certificado se renovará automáticamente cada 90 días

¡Felicidades!

Has completado la guía de instalación de certificados SSL/TLS

Ahora tu sitio web está más seguro y profesional.
¡Sigue aprendiendo y protegiendo tus proyectos!