Crear certificado SSL en Ubuntu 16.04

De Nitradopedia ES
Saltar a: navegación, buscar

Para encriptar tu sitio web con SSL, necesitas un certificado SSL. Dado que los certificados validados son relativamente costosos, también existe una versión gratuita que funciona igual de bien y funciona para todos los visitantes.

Instalación y configuración

Para instalar Certbot, necesitas Git y, por supuesto, Certbot.

Primero debes actualizar tu servidor:

sudo apt-get update && sudo apt-get upgrade

Instalación de Git:

sudo apt-get install git

Instalación de Certbot:

sudo git clone https://github.com/certbot/certbot.git

Habilita el módulo SSL de Apache 2:

sudo a2enmod ssl


Solicitar certificado

Para trabajar con Cerbot, el servidor web debe estar detenido.

Detén el servidor web

Servidor Web (NGINX):

sudo /etc/init.d/nginx stop

Servidor Web (Apache 2):

sudo /etc/init.d/apache2 stop

Solicita un certificado para un subdominio:

Nota: El siguiente paso solo funciona si un dominio válido (example.de, example.com) redirige a la IP del servidor. Se recomienda un Wildcard A-record para la IP del servidor.

Cuando se detiene el servidor web, debes navegar a la carpeta Certbot descargada. Para solicitar un certificado.

cd ~/certbot

Si estás en el directorio de Certbot, ahora puedes solicitar un certificado.

./certbot-auto certonly --standalone -d example.tld

Certbot ahora debería solicitar automáticamente los paquetes requeridos. En caso contrario, la instalación de los paquetes debe confirmarse con "Y".

Entrada de correo electrónico para notificaciones de Certbot

Certbot envía una notificación al correo electrónico especificado cuando caduca un certificado. Dado que cada certificado solo es válido por 3 meses, se enviará un correo electrónico 20 días antes de la fecha de vencimiento.

Certbot email.png

= Confirmación de las condiciones de uso

Después de ingresar una dirección de correo electrónico válida, ahora debes leer y aceptar los términos de uso de Certbot.

Certbot accept terms.PNG

Se creó el certificado

Cuando se haya verificado la solicitud de certificado, debería aparecer un mensaje que comience con Congratulations!.

El certificado ya está creado y tiene una validez de 3 meses.


Implementación del certificado

El certificado debe ingresarse en el vHost del sitio web antes de su uso. La instalación varía según el servidor web.

Implementación con un servidor web NGINX

Primero navega hasta el directorio root de los archivos vHost. Ingresa el siguiente comando:

cd /etc/nginx/sites-enabled/

Crea un vHost SSL para NGINX

Importante: Se requiere PHP-CGI para los siguientes pasos. Puede encontrar un tutorial para instalar CGI aquí: <LINK TO CGI TUT>

Para crear un vHost debes seguir estos pasos.

sudo nano example_tld.conf

Se inserta lo siguiente en el archivo:

server {
        listen <IP DEL SERVIDOR>:443 ssl;
        server_name <domain.tld> *.<domain.tld>;
        
        # SSL
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE$
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1h;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_certificate /etc/letsencrypt/live/<domain.tld OR subdomain.domain.tld>/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/<domain.tld OR subdomain.domain.tld>/privkey.pem;
        ssl_client_certificate /etc/letsencrypt/live/<domain.tld OR subdomain.domain.tld>/chain.pem;
        
        # CONFIG
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        root <DIRECTORIO>;
        index index.php;

        location / {
                try_files $uri $uri/ @rewrites;
        }

        location @rewrites {
                rewrite ^ /index.php last;
        }

        location ~ \.php$ {
            include /etc/nginx/fastcgi_params;
            fastcgi_pass 127.0.0.1:8888;
            fastcgi_index index.php;
            fastcgi_param HTTPS on;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
}

Importante: Todos los lugares con < > deben ser reemplazados por datos correctos sin los <>!

Luego, el archivo se guarda y se cierra con CTRL+X Y y Enter.

Implementación para un servidor web Apache 2

Primero navega hasta el directorio root de los archivos vHost. Ingresa el siguiente comando:

cd /etc/apache2/sites-available/

Crea un vHost SSL para Apache 2

Primero se debe crear un archivo vHost.

sudo nano example_tld.conf


Se inserta lo siguiente en el archivo:

<VirtualHost *:443>
	SSLEngine on
	SSLCertificateFile /etc/letsencrypt/live/<domain.tld>/fullchain.pem
	SSLCertificateKeyFile /etc/letsencrypt/live/<domain.tld>/privkey.pem

	ServerAdmin [email protected]
	ServerName localhost

	DocumentRoot /var/www/domain-name/
</VirtualHost>

Importante: Parámetros como ServerName, IP, DocumentRoot y <domain.tld> así como SSLCertificateFile y SSLCertificateKeyFile debe ser reemplazados por registros válidos.

Luego, el archivo se guarda y se cierra con CTRL+X Y y Enter.

Activar el vHost creado

Para activar el vHost se debe ejecutar el siguiente comando:

sudo ln -s /etc/apache2/sites-available/<name_vhost.conf /etc/apache2/sites-enabled/

SSL force

A menudo se desea que solo se pueda acceder a determinadas páginas a través de https://.

Activar HSTS en NGINX

Abra el archivo vHost deseado::

sudo nano /etc/nginx/sites-enabled/<vhost>.conf

Inserta la siguiente línea dentro de server { block:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Todas las conexiones ahora se ejecutan a través de https://.

Habilitar HSTS en Apache 2

Activar módulo de encabezados

sudo a2enmod headers

Editando el vHost

Abra el archivo vHost deseado:

sudo nano /etc/apache2/sites-available/<vhost>.conf

Inserta la siguiente línea dentro del '<VirtualHost *:443> block:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains;"

Todas las conexiones ahora se ejecutan a través de https://.

Inicie el servidor web

El servidor web ahora se puede iniciar de nuevo.

Servidor web (NGINX):

sudo /etc/init.d/nginx start

Servidor web (Apache 2):

sudo /etc/init.d/apache2 start

Ahora se puede acceder al dominio deseado en https://domain.tld/.