Configuración de Nginx SSL en Linux

Configuración de Nginx SSL en Linux

SSL (significa Secure Socket Layer) es un protocolo web que hace que el tráfico entre el servidor y el cliente sea seguro encriptándolo. El servidor y los clientes transmiten de forma segura el tráfico sin el riesgo de que los terceros interpreten la comunicación. También ayuda al cliente a verificar la identidad del sitio web con el que se están comunicando.

En esta publicación, describiremos cómo configurar SSL para Nginx. Demostraremos el procedimiento utilizando el certificado autofirmado. Un certificado autofirmado solo cifra la conexión pero no valida la identidad de su servidor. Por lo tanto, debe usarse solo para entornos de prueba o para servicios de LAN internos. Para el entorno de producción, es mejor usar los certificados firmados por CA (Autoridad de Certificado).

Requisitos previos

Para esta publicación, debe tener los siguientes requisitos previos:

  • Nginx ya instalado en su máquina
  • Bloque de servidor configurado para su dominio
  • Usuario con privilegios de sudo

El procedimiento explicado aquí se ha realizado en Debian 10 (Buster) máquina.

Paso 1: Generación de un certificado autofirmado

Nuestro primer paso será generar un certificado autofirmado. Emita el siguiente comando en el terminal para generar CSR (solicitud de firma de certificado) y una clave:

$ sudo openssl req -x509 -nodes -days 365 -newkey RSA: 2048 -keyout/etc/ssl/private/selfsigned -nginx.Key -Out/Etc/SSL/Certs/Selfsigned -Nginx.CRT

Se le pedirá que proporcione información como el nombre de su país, el estado, la localidad, el nombre común (su nombre de dominio o dirección IP) y la dirección de correo electrónico.

En el comando anterior, OpenSSL creará los siguientes dos archivos:

  • CSR: autofsignado-nginx.CRT en el en el /etc/ssl/cert/directorio
  • Llave: autofsignado-nginx.llave en el /etc/ssl/directorio privado

Ahora crea el dhparam.archivo PEM Usando el siguiente comando:

$ sudo openssl dhparam -out/etc/ssl/certs/dhparam.PEM 2048

Paso 2: Configuración de Nginx para usar SSL

En el paso anterior, hemos creado la CSR y la clave. Ahora en este paso, configuraremos el NGINX para usar SSL. Para esto, crearemos un fragmento de configuración y agregaremos información sobre nuestros archivos de certificado SSL y ubicaciones de clave.

Emitir el siguiente comando en Terminal para crear un nuevo fragmento de configuración firme.archivo conf en el /etc/nginx/fragmentos.

$ sudo nano/etc/nginx/fragmentos/autofirmado.confusión

En el archivo, agregue las siguientes líneas:

ssl_certificate/etc/ssl/certs/selfsigned-nginx.CRT;
ssl_certificate_key/etc/ssl/private/selfsigned nginx.llave;

El ssl_certificate se establece en autofsignado-nginx.CRT (archivo de certificado) mientras el ssl_certificate_key se establece en autofsignado-nginx.llave (archivo de clave).

Guarde y cierre el firme.confusión archivo.

Ahora crearemos otro archivo de fragmento ssl-params.confusión y configurar algunas configuraciones básicas de SSL. Emita el siguiente comando en la terminal para editar el ssl-params.confusión archivo:

$ sudo nano/etc/nginx/fragmentos/ssl-params.confusión

Agregue el siguiente contenido al archivo:

ssl_protocols tlsv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam/etc/ssl/certs/dhparam.pem;
SSL_CIPHERS ECDHE-RSA-AES256-GCM-SHA512: DHE-RSA-AES256-GCM-SHA512: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES256-GCM-SHA384: ECDHE-RSAES256-SHA384;
SSL_ECDH_CURVE SECP384R1;
ssl_session_timeout 10m;
ssl_session_cache compartido: ssl: 10m;
ssl_session_tickets apagado;
# ssl_stapling on;
# ssl_stapling_verify on;
Resolvente 8.8.8.8 8.8.4.4 válido = 300s;
resolver_timeout 5s;
add_header x-frame-options negar;
add_header x-content-type-options nosniff;
add_header X-XSS-Protection "1; mode = block";

Como no estamos utilizando un certificado firmado con CA, por lo tanto, hemos deshabilitado el grapado SSL. Si está utilizando un certificado firmado con CA, descompone el ssl_stapling entrada.

Paso 3: Configuración del NGINX para usar SSL

Ahora abriremos el archivo de configuración del bloque del servidor NGINX para hacer algunas configuraciones. En este paso, asumiremos que ya ha configurado el bloque del servidor, que será similar a esto:

servidor
Escucha 80;
escuchar [::]: 80;
root/var/www/test.org/html;
índice índice.índice HTML.índice HTM.nginx-debio.html;
Prueba de Nombre de server.org www.prueba.org;
ubicación /
try_files $ uri $ uri/ = 404;

Para abrir el archivo de configuración del bloque del servidor NGINX, use el siguiente comando:

$ sudo nano/etc/nginx/sites disponible/prueba.organizar

Ahora modifique el existente servidor bloque para que se vea así:

servidor
Escuche 443 SSL;
escuchar [::]: 443 ssl;
incluir fragmentos/autofirmados.conf;
incluir fragmentos/params ssl.conf;
root/var/www/test.org/html;
índice índice.índice HTML.índice HTM.nginx-debio.html;
Prueba de Nombre de server.org www.prueba.org;

En las configuraciones anteriores, también hemos agregado los fragmentos SSL firme.confusión y ssl-params.confusión que hemos configurado antes.

A continuación, agregue un segundo servidor bloquear.

servidor
Escucha 80;
escuchar [::]: 80;
Prueba de Nombre de server.org www.prueba.org;
return 302 https: // $ server_name $ request_uri;

En la configuración anterior, regreso 302 redirige el http a https.

Nota: Asegúrese de reemplazar la prueba.org con su propio nombre de dominio. Ahora guarde y cierre el archivo.

Paso 4: Permitir el tráfico SSL a través del firewall

Si un firewall está habilitado en su sistema, deberá permitir el tráfico SSL a través de él. Nginx le proporciona tres perfiles diferentes con UFW. Puede verlos usando el siguiente comando en terminal:

$ sudo UFW Lista de aplicaciones

Verá la siguiente salida con tres perfiles para el tráfico NGINX.

Deberá permitir el perfil "Nginx completo" en el firewall. Para hacerlo, use el siguiente comando:

$ sudo Ufw Permitir 'Nginx Full'

Para verificar si el perfil se ha permitido en el firewall, use el siguiente comando:

$ sudo UFW estado

Paso 5: Prueba el archivo de configuración de Nginx

Ahora pruebe el archivo de configuración de Nginx utilizando el siguiente comando en terminal:

$ sudo nginx -t

Deberías ver la siguiente salida.


Ahora cree el enlace simbólico entre sitios disponibles y habilitado para sitios:

$ ln -s/etc/nginx/sites disponible/prueba.com/etc/nginx/sites-habilitado/

Luego reinicie el servicio NGINX para aplicar los cambios de configuración. Use el siguiente comando para hacerlo:

$ sudo systemctl reiniciar nginx

Paso 6: Prueba SSL

Ahora para probar el SSL, navegue a la siguiente dirección:

https: // dirección de dominio-or-ip

Como hemos configurado el certificado autofirmado, por lo tanto, veremos una advertencia de que la conexión no es segura. La siguiente página aparece cuando se usa el navegador Mozilla Firefox.

Haga clic en el Avanzado botón.

Hacer clic Añadir excepción.

Luego haga clic Confirmar la excepción de seguridad.

Ahora verá su sitio HTTPS pero con una señal de advertencia (bloqueo con una señal de advertencia amarilla) sobre la seguridad de su sitio web.

Además, verifique si la redirección funciona correctamente accediendo a su dominio o dirección IP usando HTTP.

http: // dirección de dominio-or-ip

Ahora, si su sitio redirige automáticamente a HTTPS, esto significa que la redirección funcionó correctamente. Para configurar la redirección de forma permanente, edite el archivo de configuración del bloque del servidor utilizando el siguiente comando en terminal:

$ sudo nano/etc/nginx/sites disponible/prueba.organizar

Ahora cambia la devolución 302 regresar 301 en el archivo y luego guárdelo y cierre.

Así es como puede configurar SSL para Nginx en el sistema Debian 10. Hemos configurado el certificado autofirmado para la demostración. Si está en un entorno de producción, siempre busque un certificado de CA.