Instalación de servidor web con Nginx y Let’s Encrypt en Ubuntu 16.04

Let’s Encrypt es una nueva Autoridad Certificadora (CA) que proporciona de manera sencilla la obtención de certificados TLS/SSL gratuitos permitiendo así HTTPS en servidores web.

Actualmente, todo el proceso de obtención e instalación de un certificado está automatizado sólo en servidores web Apache. Sin embargo, Let’s Encrypt se puede utilizar para obtener un certificado SSL gratuito y luego instalarlo manualmente, independientemente del software del servidor web.

En este tutorial mostraremos como instalar Nginx como servidor web y luego añadiremos un certificado con Let’s Encrypt. Después explicaremos como renovar automáticamente su certificado SSL. Todo este proceso lo realizaremos en un Ubuntu 16.04 bajo root.

Requisitos

Los requisitos para continuar con este tutorial es importante tener primero acceso root en nuestro servidor VPS. También es importante tener un dominio que esté apuntando a los DNS de Clouding. Además, de nuestro dominio tiene que tener un registro tipo A para que el proceso de creación del certificado funcione correctamente.

Si queremos crear un certificado para example.com y www.example.com es necesario tener ambos registros deben estar creados en la configuración del DNS.

Instalación del servidor web Nginx

El primer paso es instalar Nginx:

# apt-get install nginx

Seguidamente lo iniciamos y lo activamos para el arranque:

# systemctl start nginx
# systemctl enable nginx

Configuración Nginx

Ahora configuramos un espacio web, donde tendremos la configuración de nuestra web. Lo primero creamos una copia de la configuración por defecto:

# cd /etc/nginx/sites-available
# cp default example.com

Y editamos el fichero de configuración /etc/nginx/example.com.conf y modificamos el parámetro root:

listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/html/example.com/www;

Creamos el nuevo directorio:

# mkdir -p /var/www/html/example.com/www

Activamos la web:

# ln -s  /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled

Reiniciamos Nginx para que tenga efecto

# systemctl restart nginx

Instalación de Let’s Encrypt

Lo primero que vamos hacer es instalar el Certbot, que es quien nos va a crear el certificado para luego instalarlo en nuestra página web. Agregamos el repositorio y los actualizamos:

# add-apt-repository ppa:certbot/certbot
# apt-get update

Y luego lo instalamos:

# apt-get install certbot

Una vez instalado, modificamos el fichero de configuración de Nginx para nuestra web, y tenemos que añadir lo siguiente:

location ~ /.well-known {
allow all;
}

Con eso añadido, comprobamos que la configuración del fichero es correcta:

# nginx -t

Y luego reiniciamos:

# systemctl restart nginx

Ahora creamos el certificado con:
# certbot certonly --webroot --webroot-path=/var/www/html/example.com/www -d example.com -d www.example.com

Esta es la salida del comando:

Renewing an existing certificate
Performing the following challenges:
http-01 challenge for example.com
Using the webroot path /var/www/html/example.com/www for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2017-08-28. To obtain a new or tweaked version
of this certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
- If you like Certbot, please consider supporting our work by:

Configuración de Let’s Encrypt con Nginx

Ahora toca configurar Nginx para que coja el certificado creado por Cerbot y así poder usar los certificados que proporciona Let’s Encrypt. Para ello tenemos que crear varios ficheros de configuración. Crearemos un fichero de configuración en /etc/nginx/snippets con el nombre de nuestro dominio, acabado con .conf y que empiece por ssl, así:

# nano /etc/nginx/snippets/ssl-example.com.conf

Dentro tenemos que poner lo siguiente:

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

Ahora hay que modificar la configuración del fichero de nuestra web y hay que dejar nuestra configuración de la siguiente manera:

server {
listen 80;
listen [::]:80;
server_name example.com www.example.com
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443;
#include snippets/snakeoil.conf;
include snippets/ssl-example.com.conf;
...

Una vez hemos modificado el fichero, podemos comprobar la sintaxis:

# nginx -t

Si nos da algún error es importante solucionar el problema antes de seguir con el siguiente paso. Una vez nos aparezca que todo es correcto, reiniciamos el servicio:

# systemctl restart nginx

Y listo, ya podemos acceder a nuestra página web desde HTTPS! 😀

Para comentar sobre este artículo, rellena el formulario. Los campos marcados con un asterisco (*) son obligatorios.


*