Más allá de WordPress 2: Configurar HTTPS mediante un certificado Letsencrypt

En el artículo de hoy vamos a convertir nuestro sitio en un sitio seguro mediante la instalación de un certificado SSL de Letsencrypt. Hasta hace pocos años solo teníamos dos opciones: o instalábamos un certificado auto-firmado, lo cual hacía que la página inicial mostrara una incómoda advertencia, o teníamos que pagar por un certificado verificado por una entidad de certificación (CA). Ahora tenemos esta opción gratuita que es la que vamos a utilizar. Aquí tenemos información general de Let’s Encrypt y nosotros vamos a instalar el cliente Certbot que nos va a permitir instalar el certificado:

Certbot – https://certbot.eff.org/
Instrucciones para NGINX + Ubuntu 16.04 – https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx

Antes de instalar debemos decidir sobre un par de cuestiones:

• Cada certificado es válido para un dominio o subdominio, y dado que www. es un subdominio en si mismo, debemos decidir para que dominios vamos a obtener nuestro certificado: para dominio.com, para www.dominio.com o para ambos. Yo haré el ejemplo solo para dominio.com, ya que en general el prefijo www la gente no lo utiliza con el consiguiente trastorno de generar dos certificados.

• Podemos instalar los certificados y luego modificar la configuración manualmente o que Certbot instale los certificados junto con la configuración para NGINX. Lo haremos manualmente ya que no es muy dificil y así sabemos que archivos se modifican.

Primero instalamos Certbox

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx
Mediante el siguiente comando generamos los certificados:

$ sudo certbot certonly –webroot -w /var/www/html/sitename/public_html -d www.sitename.com -d sitename.com

Primero nos pedirá una dirección de e-mail:

Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to
cancel):

Pulsamos A para aceptar las condiciones:

Please read the Terms of Service at

(A)gree/(C)ancel: A

Pulsamos N para no recibir e-mails:

Would you be willing to share your email address with the Electronic Frontier

(Y)es/(N)o: N

Por ultimo veremos un mensaje indicandonos que se han generado los certificados y su ubicación, que es /etc/letsencrypt/live/dominio:

$ cd /etc/letsencrypt/live/dominio
sudo ls -la
drwxr-xr-x 2 root root 4096 Apr 25 15:42 .
drwx—— 3 root root 4096 Apr 25 15:42 ..
lrwxrwxrwx 1 root root 34 Apr 25 15:42 cert.pem -> ../../archive/dominio/cert1.pem
lrwxrwxrwx 1 root root 35 Apr 25 15:42 chain.pem -> ../../archive/dominio/chain1.pem
lrwxrwxrwx 1 root root 39 Apr 25 15:42 fullchain.pem -> ../../archive/dominio/fullchain1.pem
lrwxrwxrwx 1 root root 37 Apr 25 15:42 privkey.pem -> ../../archive/dominio/privkey1.pem

A continuación debemos modificar la configuración de NGINX para instalar los certificados, pero antes debemos descargar un archivo con opciones y generar otro:

sudo wget https://raw.githubusercontent.com/certbot/certbot/master/certbot-nginx/certbot_nginx/options-ssl-nginx.conf

Este archivo son algunas opciones necesarias para nuestra configuración SSL del servidor Nginx.

En el archivo que acabamos de descargar podemos añadir la siguiente linea solo si vamos a utilizar HTTPS y no HTTP. Esto nos dará una puntuación mayor en el test que haremos al final.

add_header Strict-Transport-Security «max-age=31536000» always;

El siguiente comando genera otra característica de seguridad, los parámetros Ephemeral Diffie-Hellman (DHE).

sudo openssl dhparam 2048 -out ssl-dhparams.pem

Para entender un poco todas estas opciones aquí tenemos más información:

Strong SSL Security on nginx – https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html

Ahora deberemos modificar la configuracion de nuestro site ubicada en /etc/nginx/sites-available/sitename.conf y realizamos las siguientes modificaciones:

listen 443 ssl;

ssl_certificate /etc/letsencrypt/live/world4.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/world4.net/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

Para finalizar la configuración, añadimos el siguiente contexto server al final del archivo, con esto haremos que nuestras peticiones a http://dominio.com vayan dirigidas a https://dominio.com

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://$host$request_uri;
}

Test Certificado – SSL https://www.ssllabs.com/ssltest/index.html

Renovación automática del certificado

Los certificados firmados de pago normalmente tienen una validez de 1 año, tras el cual luego hay que renovarlos. En nuestro caso, letsencrypt establece una validez de 90 días. Para renovarlo podemos ejecutar un comando unos dias antes de que caduque, o podemos agregarlo a una tarea programada para que se verifique periódicamente y se renueve poco antes de que caduque. Para ello, simplemente añadimos una nueva linea en nuestro archivo crontab

$ sudo crontab –e

00 2 * * * certbot renew

Print Friendly, PDF & Email

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *