
Let’s Encrypt es una autoridad de certificación que ofrece una forma sencilla de obtener e instalar certificados TLS/SSL gratuitos, con los que cifrar las peticiones HTTPS en tus servidores web. El proceso se apoya en un programa llamado Certbot que automatiza casi todos los pasos necesarios. Ten en cuenta que Chrome avisa a sus usuarios de los sitios no seguros, algo que puede afectar a tu posicionamiento.
En este tutorial vas a ver cómo usar Let’s Encrypt para conseguir un certificado SSL gratuito para Nginx en Ubuntu 14.04. También veremos cómo renovarlo automáticamente (un certificado de Let’s Encrypt solo es válido 90 días).
Paso 1: instalar Certbot
¿Qué es Certbot? Certbot activa automáticamente HTTPS en tu sitio web desplegando certificados de Let’s Encrypt. Si no usas Nginx o si no estás en Ubuntu 14.04, echa un vistazo a su web: explican el procedimiento a seguir en cada sistema para generar certificados SSL con Let’s Encrypt.
Empezamos por descargar Certbot en la carpeta /usr/local/sbin:
cd /usr/local/sbin
wget https://dl.eff.org/certbot-autoNo olvides darle permisos de ejecución al fichero:
chmod a+x /usr/local/sbin/certbot-autoPaso 2: obtener un certificado
Para que Certbot pueda acceder al directorio, hay que retocar la configuración de Nginx. Por defecto está en /etc/nginx/sites-available/default. Aquí usamos nano para editarlo, pero puedes hacerlo con el editor que prefieras:
nano /etc/nginx/sites-available/defaultDentro del bloque server, añade:
server {
#votre configuration ...
location ~ /.well-known {
allow all;
}
}Vas a necesitar la carpeta pública de tu sitio. Si usas el fichero de configuración por defecto, será /usr/share/nginx/html, si usas Laravel, /path/to/public/.
Comprueba que no haya errores.
nginx -tSi todo está en orden, reinicia Nginx:
service nginx restartPaso 3: configurar TLS/SSL en el servidor nginx
Ahora que conocemos la ruta pública, podemos usar el plugin Webroot para pedir un certificado SSL. Los nombres de dominio se indican con la opción -d. Si quieres que un certificado cubra varios dominios (por ejemplo, ejemplo.com y www.ejemplo.com), acuérdate de incluirlos todos, empezando por el dominio de nivel superior (ejemplo.com). Sustituye también las partes destacadas por la ruta webroot correcta y por tus nombres de dominio:
certbot-auto certonly -a webroot --webroot-path=/votre/chemin/public -d exemple.com -d www.exemple.comCertbot te pedirá varias cosas, entre ellas una dirección de correo que servirá para avisarte cuando el certificado esté a punto de caducar. Más adelante veremos cómo renovarlo automáticamente.
Los certificados
Una vez obtenido el certificado, tendrás estos ficheros:
- cert.pem: el certificado de tu dominio
- chain.pem: el certificado de Let’s Encrypt
- fullchain.pem: cert.pem y chain.pem combinados
- privkey.pem: tu clave privada.
Estos ficheros se guardan en un subdirectorio de /etc/letsencrypt/archive. Ahora bien, el cliente de Let’s Encrypt crea enlaces simbólicos hacia los certificados más recientes en el directorio /etc/letsencrypt/live/tu_nombre_de_dominio. Como esos enlaces apuntan siempre a los certificados más recientes, esa es la ruta que debes usar para referenciar tu certificado actual.
Generar una clave Diffie-Hellman
Para reforzar aún más la seguridad, conviene generar también una clave Diffie-Hellman de 2048 bits:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Tardará unos minutos, pero al terminar tendrás el fichero DH en /etc/ssl/certs/dhparam.pem.
Ya tienes el certificado SSL: ahora hay que configurar Nginx para que lo use.
Volvemos a editar nuestro bloque server:
nano /etc/nginx/sites-available/defaultEliminamos (o comentamos) las líneas siguientes, las que escuchan el puerto 80 para las peticiones HTTP:
#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;Y pasamos a escuchar el puerto 443 para HTTPS:
listen 443 ssl;Añadimos también en el bloque server el enlace simbólico que apunta a los certificados generados con el comando certbot-auto:
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;Añadimos la configuración SSL por defecto del servidor:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;Por último, fuera del bloque server principal, añade este otro bloque para redirigir HTTP (puerto 80) hacia HTTPS (puerto 443).
server {
listen 80;
listen [::]:80;
server_name exemple.com www.exemple.com;
return 301 https://$host$request_uri;
}Comprueba que no haya errores en la configuración:
nginx -tY reinicia el servidor nginx:
service nginx restartPaso 4: renovación automática del certificado
Como decía al principio, los certificados SSL caducan a los 90 días, así que hay que renovarlos. Si se te olvida, recibirás un correo antes de que el certificado de Let’s Encrypt caduque.
Para renovarlo de forma automática, añadimos el comando certbot-auto renew a las tareas CRON del servidor.
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reloadTodos los lunes, a las 2:30, se renueva el certificado y, a las 2:35, se recarga el servidor nginx.
Conclusión
Ya tienes tu servidor web con un certificado SSL emitido por Let’s Encrypt. Es una buena alternativa a los certificados de pago. Muchos alojamientos, como OVH, ofrecen SSL gratuito gracias a Let’s Encrypt. Y resulta interesante sabiendo que Google empuja poco a poco a los sitios hacia HTTPS.
fuente: digitalocean.com & wikipedia.org
···


