Introducción

SSL (Secure Sockets Layer) y TLS (Transport Layer Security) son protocolos web que se utilizan para proteger el tráfico de datos normal envolviéndolos en forma cifrada.

Esta tecnología cuenta con un sistema de certificados que permite la comunicación privada entre servidores y clientes. Crea una ruta segura para que los servidores envíen tráfico a los clientes sin que otras partes alteren la información.

En este tutorial, lo guiaremos a través del proceso de creación de un certificado SSL / TLS autofirmado y su uso en Nginx. En este caso, estamos usando el servidor Ubuntu 18.04.

requisitos

Antes de comenzar, necesitará lo siguiente:

  • Un usuario no root con permisos sudo
  • Un servidor Nginx instalado

Ahora profundicemos en el proceso.

Paso 1: cree un certificado autofirmado

Al implementar certificados SSL / TLS, se utilizan certificados públicos y una clave privada. El certificado SSL es un documento público que se comparte con los clientes que solicitan el contenido. Por otro lado, la clave SSL se utiliza para cifrar los mensajes enviados a los clientes y debe mantenerse en secreto en su servidor.

Ejecute el siguiente comando para crear un certificado y una clave autofirmada mediante SSL:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt

Abre: Esta herramienta de línea de comandos se utiliza para generar y administrar el certificado OpenSSL, las claves y otros archivos.

Req.: Este es un subcomando que indica que se debe utilizar la gestión de solicitud de firma de certificado (CSR) X.509. X.509 es el estándar de infraestructura para claves públicas al que se adhieren TLS y SSL para la gestión de claves y certificados. En nuestro caso estamos generando un nuevo certificado X.509 y por esta razón estamos usando req.

-x509: Esto cambia el subcomando req. Informa a la utilidad que estamos creando un certificado autofirmado en lugar de generar una CSR.

-Nodo: Esto le dice a OpenSSL que no proteja el certificado con una frase de contraseña. Una frase de contraseña evita que Nginx lea nuestro archivo cuando se inicia el servidor.

Días 365: Esto define la duración de la validez del certificado.

-nuevo clave rsa: 2048: Este es un comando que dice que estamos generando una nueva clave y un nuevo certificado al mismo tiempo. Rsa: 2048 Indica al servicio que genere una clave RSA de 2048 bits.

-keyout: Esta es una línea que le dice a OpenSSL que guarde la clave privada que creó.

-fuera: La línea le dice a OpenSSL dónde guardar el certificado creado.

Después del comando anterior, se le pedirá que responda algunas preguntas sobre el certificado que desea generar.

Cómo configurar Nginx para usar un certificado SSL / TLS autofirmado en Ubuntu 18.04 VPS o un servidor dedicado

Léalos atentamente y dé las respuestas correctas para completar el proceso. La línea importante de esta sección requiere el nombre común, como SU nombre o el nombre de dominio completo (FQDN) del servidor. En este caso, ingrese su nombre de dominio o la dirección IP pública asignada al servidor. .

Debería tener la salida a continuación:

OutputIT
CountryName (2 lettercode) [AU]:US
StateorProvinceName (fullname) [Some-State]:New York
LocalityName (eg, city) [ ]:New YorkCity
OrganizationName (eg, company) [Internet Widgits Pty Ltd]::Example Company
OrganizationalUnitName (eg, section) [ ]:SSL Unit
CommonName (e.g. serverFQDNorYOURname) [ ]:server_IP_address
EmailAddress [ ]:admin@your_domain.com

Una vez que haya terminado, los dos archivos se guardarán en los subdirectorios correctos en el / etc / ssl Directorio.

Necesitará estos archivos como referencia en los ajustes de configuración de Nginx. También es importante crear un grupo DH (Diffie-Hellman) fuerte, que es esencial para negociar el secreto hacia adelante con los clientes.

Para hacer esto, ejecute el siguiente comando:

$ sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096

Este proceso puede llevar un tiempo, pero una vez que esté hecho, su grupo DH (Diffie-Hellman) se guardará en /etc/nginx/dhparam.pem, que se puede usar en la configuración de Nginx.

Cómo configurar Nginx para usar un certificado SSL / TLS autofirmado en Ubuntu 18.04 VPS o un servidor dedicado

Paso 2: configurar el servidor web HTTP Nginx para usar SSL

Como ya hemos creado el certificado, la clave y los archivos, podemos configurar Nginx con estos ajustes.

Sin embargo, antes de hacer eso, debemos hacer algunos ajustes en nuestra configuración para dividir las secciones comunes en unidades reutilizables.

Cree un fragmento de configuración para la clave y el certificado SSL

Primero, cree un fragmento de la configuración de Nginx en el / etc / nginx / snippets Directorio. Llamaremos a este archivo self-signing.conf.

$ sudo nano /etc/nginx/snippets/self-signed.conf

Ahora configure el ssl_certificate en el archivo asociado y ssl_certificate_key a su clave asociada. Esto le da el siguiente resultado:

/etc/nginx/snippets/self-signed.conf
ssl_certificate /et##c/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;

Luego guarde y salga del archivo.

Genere un fragmento de configuración para definir la configuración de SSL

El siguiente paso es crear un fragmento adicional con una configuración de cifrado SSL sólida. Esto permite otras funciones adicionales para proteger su servidor.

En este caso elegiremos un nombre genérico como se muestra a continuación:

$ sudo nano /etc/nginx/snippets/ssl-params.conf

Para garantizar que Nginx SSL esté configurado de forma segura, utilizamos el formato del sitio web Cipherli.st, que contiene pautas de cifrado fáciles de usar para software popular.

En este tutorial, vamos a copiar la configuración proporcionada por este sitio, pero cambiaremos algunas líneas.

En este caso, estamos agregando nuestro solucionador de DNS para varias necesidades ascendentes. Además, comentaremos la línea que es responsable del encabezado de seguridad de transporte.

Copie y pegue los siguientes detalles en su archivo de fragmentos llamado ssl-params.conf.

ssl_protocols TLSv1.2;
ssl_prefer_server_cipherson;
ssl_dhparam /etc/nginx/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-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout  10m;
ssl_session_cache shared:SSL:10m;
ssl_session_ticketsoff; # Requires nginx >= 1.5.9
ssl_staplingon; # Requires nginx >= 1.3.7
ssl_stapling_verifyon; # Requires nginx => 1.3.7
resolver8.8.8.88.8.4.4 valid=300s;
resolver_timeout5s;
# Disable strict transport security for now. You can uncomment the following
# line if you understand the implications.
# add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

Dado que solo usamos un certificado autofirmado, no es necesario incluir el grapado SSL. Nginx desactivará automáticamente el grapado y seguirá funcionando correctamente.

Ahora guarde y salga del archivo.

Modificar la configuración de Nginx para hacer referencia a SSL

Cuando haya terminado con los fragmentos, ajuste la configuración de Nginx para permitir SSL.

En este ejemplo, usamos /etc/nginx/sites-available/example.com. Reemplace el nombre del archivo en su configuración con el que desee.

Sin embargo, comience haciendo una copia de seguridad del archivo de configuración actual:

$ sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com.bak

Abra su archivo y ajuste la línea apropiada como se muestra a continuación:

$ sudo nano /etc/nginx/sites-available/example.com

Verá una salida como esta:

/etc/nginx/sites-available/example.com
server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    . . .
}

Puede encontrar varias instrucciones de configuración que incluyen secciones como: raíz y índice puede aparecer como Ubicación, proxy_passu otras configuraciones. Es importante tener en cuenta que está bien tener estas instrucciones. Solo tienes que actualizar el escuchar Instrucciones y contienen los fragmentos de SSL.

En su archivo de configuración actual, actualice las instrucciones de la lista para el tráfico SSL del servidor en el puerto 443 y SSL. También agregue los archivos de fragmentos que creó en los dos pasos anteriores::

/etc/nginx/sites-available/example.com
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    include snippets/self-signed.conf;
    include snippets/ssl-params.conf;

    server_name example.com www.example.com;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;

    . . .
}

Después del corchete de cierre (}) del bloque de arriba, agregue otro bloque de servidor al suyo Archivo de configuración:

/etc/nginx/sites-available/example.com
. . .
server {
    listen80;
    listen [::]:80;

    server_name example.com www.example.com;

    return302 https://$server_name$request_uri;
}

La configuración anterior monitorea el puerto 80 y no solo redirige a HTTP.

Una vez que haya terminado, guarde y salga del archivo.

Paso 3: ajuste la configuración del firewall de Ufw

Si el firewall ufw está activado, debe ajustar la configuración del sistema para permitir el tráfico de datos a través de SSL.

Una vez completada la instalación, Nginx registra varios perfiles con ufw.

Puede ver estos perfiles ejecutando el siguiente comando:

$ sudo ufw app list

Verá una salida como esta:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Ejecute el siguiente comando para ver qué configuración está habilitada:

$ sudo ufw status


Debería tener un resultado como este para mostrar que su servidor web solo permite tráfico HTTP:

Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Para garantizar que el tráfico HTTPS fluya sin problemas, habilite el perfil «Nginx completo» y elimine el perfil HTTP Nginx redundante:

$ sudo ufw allow 'Nginx Full'
$ sudo ufw delete allow 'Nginx HTTP'

Su salida debería verse así:

$ sudo ufw status

producción

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Paso 4: reinicie Nginx para que los cambios surtan efecto

Después de realizar los ajustes en el firewall, reinicie el servicio Nginx para que los cambios surtan efecto.

Además, asegúrese de que no haya errores en sus archivos. Para hacer esto, ejecute el siguiente comando:

$ sudo nginx -t

Si todo funciona correctamente, debería obtener el siguiente resultado:

nginx: [warn] "ssl_stapling" ignored, issuer certificate not found
nginx: the configuration file /etc/nginx/nginx.confsyntax is ok
nginx: configuration file /etc/nginx/nginx.conftest is successful

Ahora reinicie nginx para que los cambios surtan efecto:

$ sudo systemctl restart nginx

Paso 5: probar el servidor SSL

A continuación, pruebe que el cifrado SSL funcione.

Ingrese el prefijo http: // en su navegador y luego su nombre de dominio:

https: // dominio_servidor

Dado que el certificado aún no está firmado por una autoridad de certificación confiable, lo más probable es que reciba una advertencia como la siguiente:

Es posible que vea una advertencia que aparece porque el certificado SSL creado anteriormente no fue firmado por una autoridad de certificación confiable:

Cómo configurar Nginx para usar un certificado SSL / TLS autofirmado en Ubuntu 18.04 VPS o un servidor dedicado

No se preocupe si ve este mensaje, es normal. La función de cifrado del certificado es importante. Seleccione la opción Avanzado y el enlace a continuación para ir al host.

Cómo configurar Nginx para usar un certificado SSL / TLS autofirmado en Ubuntu 18.04 VPS o un servidor dedicado

Serás redirigido a tu sitio web. En la barra de su navegador, puede ver lo que parece un candado con un ícono «X» sobre eso. Esto significa que el certificado aún no se ha validado y el cifrado aún no se ha completado.

Para verificar que el reenvío de contenido HTTP funciona correctamente, ingrese lo siguiente:

http: // dominio_servidor_o_IP

Si los resultados del icono de candado son los mismos, significa que la redirección está funcionando correctamente.

Paso 6: apunte a redireccionamientos permanentes

Si está seguro de que solo desea permitir el tráfico cifrado, es importante cambiar la configuración de Nginx para crear una redirección permanente.

Utilice el siguiente comando para abrir el archivo de configuración del bloque del servidor:

$ sudo nano /etc/nginx/sites-available/example.com

Busque la devolución 302 y reemplácela con la devolución 301:

return301 https://$server_name$request_uri;

Guarda los cambios y cierra el archivo

A continuación, verifique la configuración para detectar posibles errores de sintaxis usando el siguiente comando:

$ sudo nginx -t

Reinicie Nginx para completar los cambios:

$ sudo systemctl restart nginx

Conclusión

¡Ahí tienes! Ha configurado correctamente Nginx para utilizar el certificado SSL / TLS. Esta es una forma segura de permitir solicitudes de clientes y evitar que otras partes accedan a su tráfico.

Consulte los 3 mejores servicios de hosting de Linux