SSLLet's EncryptCertbot5 min de lectura

Instalar certificados SSL con Let's Encrypt

Obtener e instalar certificados SSL gratuitos con Certbot para tu dominio en un VPS.


¿Qué es Let's Encrypt?

Let's Encrypt es una autoridad certificadora gratuita y automatizada. Con Certbot, podés obtener e instalar certificados SSL/TLS en minutos, con renovación automática incluida.

Requisitos

  • VPS con Ubuntu/Debian
  • Dominio apuntando a la IP del servidor (registros A configurados)
  • Nginx o Apache instalado
  • Puertos 80 y 443 abiertos en el firewall

Paso 1: Instalar Certbot

bash
sudo apt update
sudo apt install -y certbot

Instalá el plugin para tu web server:

bash
# Para Nginx
sudo apt install -y python3-certbot-nginx

# Para Apache
sudo apt install -y python3-certbot-apache

Paso 2: Obtener el certificado (Nginx)

bash
sudo certbot --nginx -d tudominio.com -d www.tudominio.com

Certbot va a:

  1. Verificar que controlás el dominio
  2. Obtener el certificado
  3. Configurar Nginx automáticamente para usar HTTPS
  4. Configurar redirección HTTP → HTTPS

Seguí las instrucciones interactivas y elegí redirigir todo el tráfico a HTTPS.

Paso 2 (alternativa): Obtener el certificado (Apache)

bash
sudo certbot --apache -d tudominio.com -d www.tudominio.com

Paso 2 (alternativa): Modo standalone

Si no tenés web server corriendo:

bash
sudo certbot certonly --standalone -d tudominio.com -d www.tudominio.com

Paso 3: Verificar la instalación

bash
# Ver certificados instalados
sudo certbot certificates

# Verificar desde el navegador
# Visitá https://tudominio.com y verificá el candado

También podés verificar con OpenSSL:

bash
openssl s_client -connect tudominio.com:443 -servername tudominio.com < /dev/null 2>/dev/null | openssl x509 -noout -dates

Paso 4: Renovación automática

Certbot configura un timer de systemd para renovar automáticamente:

bash
# Verificar que el timer está activo
sudo systemctl status certbot.timer

# Simular una renovación
sudo certbot renew --dry-run

Los certificados de Let's Encrypt duran 90 días y se renuevan automáticamente 30 días antes del vencimiento.

Paso 5: Configuración SSL óptima para Nginx

Si querés configurar SSL manualmente o mejorar la configuración de Certbot:

nginx
server {
    listen 443 ssl http2;
    server_name tudominio.com www.tudominio.com;

    ssl_certificate /etc/letsencrypt/live/tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/tudominio.com/privkey.pem;

    # Configuración SSL moderna
    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;
    ssl_prefer_server_ciphers off;

    # HSTS
    add_header Strict-Transport-Security "max-age=63072000" always;

    # OCSP Stapling
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 1.1.1.1 valid=300s;
}

# Redirección HTTP → HTTPS
server {
    listen 80;
    server_name tudominio.com www.tudominio.com;
    return 301 https://$server_name$request_uri;
}

Certificado wildcard

Para cubrir todos los subdominios (*.tudominio.com):

bash
sudo certbot certonly --manual --preferred-challenges dns -d tudominio.com -d '*.tudominio.com'

Esto requiere agregar un registro TXT en tu DNS para verificación.

Solución de problemas

Error: "Could not connect to port 80"

bash
# Verificar que el puerto 80 está abierto
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Error: "DNS problem"

  • Verificá que el dominio apunta a la IP correcta: dig tudominio.com +short
  • Esperá a que la propagación DNS se complete

Renovación falla

bash
# Ver logs de renovación
sudo journalctl -u certbot.service

# Forzar renovación
sudo certbot renew --force-renewal

Recomendaciones

  • Siempre usá --dry-run antes de renovaciones manuales
  • Configurá alertas para vencimiento de certificados como respaldo
  • Usá la configuración SSL moderna (TLS 1.2+) para mejor seguridad
  • Verificá tu configuración SSL en ssllabs.com/ssltest

¿Te resultó útil esta guía?