Hosting Equipo Avantys 6 min

SSL en VPS: Certificados HTTPS con Let's Encrypt

Instala SSL gratis en tu VPS con Let's Encrypt. Configuración de Certbot, renovación automática, Nginx y Apache, wildcards y solución de errores.

// Compartir

SSL en VPS: Certificados HTTPS con Let's Encrypt
SSL en VPS con Let's Encrypt

Sin HTTPS tu web muestra “No seguro” en el navegador. Los usuarios desconfían y Google te penaliza. La buena noticia: con Let’s Encrypt tienes SSL gratis en minutos.

Esta guía te enseña a configurar HTTPS en tu VPS correctamente.

¿Por qué necesitas SSL?

Sin SSLCon SSL
”No seguro” en navegadorCandado verde
Datos sin cifrarComunicación cifrada
Penalización SEOMejor ranking
Sin HTTP/2HTTP/2 habilitado
Usuarios desconfíanGenera confianza

Tipos de certificados

Tipos de certificados SSL
TipoValidaciónTiempoCosteUso
DVDominioMinutosGratis-€50Blogs, webs pequeñas
OVOrganizaciónDías€50-200Empresas
EVExtendidaSemanas€200-500Bancos, e-commerce
WildcardSubdominiosVariableVariableMúltiples subdominios

Let’s Encrypt ofrece certificados DV gratuitos, perfectos para la mayoría de casos.

Instalar Certbot

Proceso de SSL con Let's Encrypt

Ubuntu/Debian

# Instalar Certbot
sudo apt update
sudo apt install certbot -y

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

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

Rocky/AlmaLinux

sudo dnf install epel-release -y
sudo dnf install certbot python3-certbot-nginx -y

SSL con Nginx

Método automático (recomendado)

# Certbot configura todo automáticamente
sudo certbot --nginx -d tudominio.com -d www.tudominio.com

# Seguir instrucciones:
# 1. Email para notificaciones
# 2. Aceptar términos
# 3. Elegir redirect HTTP→HTTPS (opción 2)

Verificar configuración

# Certbot añade esto a tu configuración Nginx
cat /etc/nginx/sites-available/tudominio.com
server {
    listen 443 ssl;
    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;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
    root /var/www/tudominio;
    index index.html index.php;
    
    # ... resto de configuración
}

server {
    listen 80;
    server_name tudominio.com www.tudominio.com;
    return 301 https://$host$request_uri;
}

Método manual

Si prefieres control total:

# Solo obtener certificado
sudo certbot certonly --nginx -d tudominio.com -d www.tudominio.com
# Configurar manualmente en 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_prefer_server_ciphers off;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    
    # HSTS
    add_header Strict-Transport-Security "max-age=63072000" always;
    
    root /var/www/tudominio;
    # ...
}

SSL con Apache

Método automático

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

Verificar configuración

cat /etc/apache2/sites-available/tudominio-le-ssl.conf
<VirtualHost *:443>
    ServerName tudominio.com
    ServerAlias www.tudominio.com
    DocumentRoot /var/www/tudominio
    
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/tudominio.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/tudominio.com/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>

Renovación automática

Verificar timer de renovación

# Certbot crea un timer automático
sudo systemctl status certbot.timer

# Ver próxima ejecución
sudo systemctl list-timers | grep certbot

Probar renovación

# Simular renovación (no renueva realmente)
sudo certbot renew --dry-run

# Si funciona, la renovación automática está OK

Renovación manual

# Renovar todos los certificados
sudo certbot renew

# Renovar certificado específico
sudo certbot renew --cert-name tudominio.com

Crear cron de renovación (si no hay timer)

# Cron para renovar cada 12 horas
sudo crontab -e

0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

Certificado Wildcard

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

Requisitos

  • Acceso al DNS del dominio
  • Plugin DNS de Certbot o validación manual

Con Cloudflare

# Instalar plugin
sudo apt install python3-certbot-dns-cloudflare -y

# Crear archivo de credenciales
sudo nano /etc/letsencrypt/cloudflare.ini
dns_cloudflare_api_token = tu-api-token-de-cloudflare
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# Obtener wildcard
sudo certbot certonly \
    --dns-cloudflare \
    --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
    -d tudominio.com \
    -d *.tudominio.com

Validación manual DNS

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

# Certbot te pedirá crear un registro TXT
# _acme-challenge.tudominio.com con un valor específico
# Crear el registro y esperar propagación antes de continuar

Múltiples dominios

Un certificado para varios dominios

sudo certbot --nginx \
    -d dominio1.com -d www.dominio1.com \
    -d dominio2.com -d www.dominio2.com

Certificados separados

sudo certbot --nginx -d dominio1.com -d www.dominio1.com
sudo certbot --nginx -d dominio2.com -d www.dominio2.com

Configuración SSL óptima

Headers de seguridad

server {
    listen 443 ssl http2;
    # ...
    
    # HSTS - Forzar HTTPS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    
    # Prevenir clickjacking
    add_header X-Frame-Options "SAMEORIGIN" always;
    
    # Prevenir XSS
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    
    # Referrer policy
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}

Verificar configuración SSL

# Test local
openssl s_client -connect tudominio.com:443 -servername tudominio.com

# Ver certificado
echo | openssl s_client -connect tudominio.com:443 2>/dev/null | openssl x509 -text -noout

# Fecha de expiración
echo | openssl s_client -connect tudominio.com:443 2>/dev/null | openssl x509 -noout -dates

Herramientas online:

  • ssllabs.com/ssltest
  • securityheaders.com

Forzar HTTPS

En Nginx

server {
    listen 80;
    server_name tudominio.com www.tudominio.com;
    return 301 https://$host$request_uri;
}

En Apache

<VirtualHost *:80>
    ServerName tudominio.com
    Redirect permanent / https://tudominio.com/
</VirtualHost>

En WordPress (wp-config.php)

define('FORCE_SSL_ADMIN', true);

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}

Errores comunes

”Certificate not yet valid"

# Verificar hora del servidor
date
timedatectl

# Sincronizar hora
sudo timedatectl set-ntp true

"Too many certificates”

Let’s Encrypt tiene límites:

  • 50 certificados por dominio por semana
  • 5 duplicados por semana
# Ver certificados actuales
sudo certbot certificates

# Revocar si es necesario
sudo certbot revoke --cert-name tudominio.com

”DNS problem” o “Unauthorized”

# Verificar que DNS apunta correctamente
dig tudominio.com +short

# Verificar que puerto 80 está abierto
sudo ufw status
curl -I http://tudominio.com

Renovación falla

# Ver logs
sudo journalctl -u certbot

# Verificar que el servidor web está corriendo
sudo systemctl status nginx

# Probar validación manual
sudo certbot certonly --dry-run -d tudominio.com

Mixed content (contenido mixto)

# Buscar URLs http:// en tu sitio
grep -r "http://" /var/www/tudominio --include="*.php" --include="*.html"

# En WordPress, actualizar URLs en base de datos
wp search-replace 'http://tudominio.com' 'https://tudominio.com' --path=/var/www/wordpress

Gestionar certificados

Ver certificados instalados

sudo certbot certificates

Eliminar certificado

sudo certbot delete --cert-name tudominio.com

Revocar certificado

sudo certbot revoke --cert-name tudominio.com

Expandir certificado (añadir dominios)

sudo certbot --nginx --expand -d tudominio.com -d www.tudominio.com -d nuevo.tudominio.com

SSL con Cloudflare

Modos de SSL

ModoComportamiento
OffSin SSL
FlexibleSSL solo navegador↔Cloudflare
FullSSL en todo, acepta certificado inválido
Full (Strict)SSL en todo, requiere certificado válido

Recomendado: Full (Strict) con Let’s Encrypt en tu VPS.

Certificado de origen Cloudflare

Si prefieres no usar Let’s Encrypt:

  1. Cloudflare Dashboard → SSL/TLS → Origin Server
  2. Create Certificate
  3. Descargar .pem y .key
  4. Configurar en Nginx

Preguntas frecuentes

¿Let's Encrypt es seguro para producción?

Sí, absolutamente. Let's Encrypt es una CA reconocida por todos los navegadores. Lo usan millones de sitios incluyendo grandes empresas.

¿Cada cuánto se renuevan los certificados?

Los certificados de Let's Encrypt duran 90 días. Certbot intenta renovar cuando quedan 30 días, automáticamente si configuraste el timer.

¿Puedo usar Let's Encrypt para e-commerce?

Sí. Para e-commerce básico, Let's Encrypt es suficiente. Solo considera certificados EV si necesitas mostrar el nombre de la empresa en la barra del navegador.

¿Por qué mi certificado no cubre www?

Debes incluir ambos dominios al crear el certificado: -d tudominio.com -d www.tudominio.com. Puedes expandir un certificado existente con --expand.

¿Qué pasa si el certificado expira?

Tu sitio mostrará error de certificado y los usuarios verán una advertencia. Configura renovación automática y alertas por email para evitarlo.

Nuestra recomendación

Setup básico:

  1. Instalar Certbot con plugin de tu servidor
  2. certbot --nginx -d tudominio.com -d www.tudominio.com
  3. Verificar renovación automática
  4. Probar con SSL Labs

Para máxima seguridad:

  • Headers de seguridad (HSTS, X-Frame-Options)
  • SSL Labs grado A+
  • Monitorizar expiración

¿Necesitas SSL gestionado? El hosting WordPress de Avantys incluye SSL automático sin configuración.


Conclusión

Con Let’s Encrypt y Certbot, no hay excusa para no tener HTTPS. En 5 minutos tienes tu VPS protegido con SSL gratuito y renovación automática.

Recuerda probar tu configuración en SSL Labs y configurar alertas de expiración.

¿Necesitas un VPS con SSL incluido? Explora los VPS de Avantys con certificados SSL gratuitos.


¿Quieres que lo hagamos por ti?

En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.

Hablar con Avantys
// Boletín

Suscríbete al boletín

Guías nuevas, sin spam. Cancela cuando quieras.