GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo crear un certificado SSL autofirmado para Nginx en Ubuntu 18.04

SSL significa "Secure Sockets Layer", que es la tecnología de seguridad estándar destinada a crear un enlace cifrado entre un servidor web y un navegador web. Este enlace garantiza que toda la información que se transmite entre el servidor y el navegador permanezca privada y segura. El objetivo principal de los certificados SSL es garantizar la seguridad del sitio web y cifrar los datos transferidos entre el cliente y el navegador para evitar el robo de información confidencial, como detalles de tarjetas de crédito, números de cuenta y contraseñas, etc.

Un certificado autofirmado es un certificado firmado por la persona que lo crea en lugar de una autoridad de certificación (CA) de confianza. La mayoría de los clientes y organizaciones tienen la tentación de utilizar certificados SSL autofirmados en lugar de los emitidos y verificados por una autoridad de certificación de confianza, principalmente debido a la diferencia de costos. Pero todavía ofrece el mismo nivel de encriptación hasta un límite.

En este artículo, explicaré cómo crear un certificado SSL autofirmado en un servidor Ubuntu 18.04 con servidor web Nginx.

Requisitos previos

Un servidor bien configurado con privilegios de raíz y biblioteca OpenSSL. Se requiere la biblioteca OpenSSL para generar su propio certificado. Ejecute el siguiente comando en su servidor ubuntu para ver si ya tiene instalado OpenSSL.

# which openssl
/usr/bin/openssl

Si el comando which no devolvió el binario, entonces necesitaremos instalarlo usando el comando:

#apt install openssl

Creación del certificado autofirmado

SSL se compone principalmente de dos partes, una es la clave privada y el otro certificado público. La clave SSL se mantiene privada en el servidor restringida al usuario raíz. En realidad, se utiliza para cifrar el contenido enviado a los clientes. El certificado SSL público se comparte con cualquiera que solicite el contenido. Se puede utilizar para descifrar el contenido firmado por la clave SSL privada asociada. Aquí, estoy usando este comando para generar un certificado autofirmado, a saber, example.com.crt y una clave privada example.com.key (aquí estoy usando example.com.pem como nombre de archivo) usando la herramienta OpenSSL.

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

Consulte los detalles de cada opción a continuación:

  • req:este subcomando se usa para crear un nuevo certificado X.509. El "X.509" es un estándar de infraestructura de clave pública al que se adhieren SSL y TLS para su gestión de claves y certificados.
  • -x509:Esto modifica aún más el subcomando anterior al decirle a la utilidad que queremos crear un certificado autofirmado.
  • -nodos:Esto se usa para omitir la opción de frase de contraseña para asegurar nuestro certificado.
  • -días 365:esta opción establece la validez del certificado en días. Lo estamos configurando para un año aquí.
  • -newkey rsa:2048:Esto especifica que queremos generar una nueva clave RSA con 2048 bits de longitud junto con el certificado.
  • -keyout:esta opción le dice a OpenSSL dónde colocar el archivo de clave privada generado.
  • -out:esta opción le dice a OpenSSL dónde colocar el certificado generado.

Durante la ejecución de este comando, nos pedirá que proporcionemos los detalles del dominio/cliente para generar una solicitud de firma de certificado (CSR). Puede proporcionar estos detalles según sea necesario.

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]

Ahora tenemos nuestro certificado autofirmado recién generado y la clave privada se encuentra en estas ubicaciones, a saber:/etc/ssl/certs/example.com.pem y /etc/ssl/private/example.com.key . A continuación, debemos crear un grupo Diffie-Hellman fuerte, que se utiliza para negociar Perfect Forward Secrecy con los clientes. Puede ejecutar este comando para crear uno.

#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Esto puede tardar un tiempo en completarse, pero cuando esté listo, tendremos un grupo DH fuerte en /etc/ssl/certs/dhparam.pem que podemos usar en nuestra configuración.

Configurar Nginx para usar certificados autofirmados

Antes de comenzar, debemos asegurarnos de que el servidor web Nginx esté instalado en nuestro servidor Ubuntu 18.04. Si no está instalado, puede instalarlo usando este simple comando:

#apt install nginx

Instalé y habilité este servicio en mi servidor.

# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)

#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx

Próximo. podemos configurar Nginx para usar SSL. Lo explicaré en tres pasos:

  1. Crear una configuración de fragmento con los detalles del certificado SSL generado.
  2. Crear una configuración de fragmento para mantener una configuración de SSL fuerte y segura que supere las posibles vulnerabilidades de SSL.
  3. Actualización del host virtual del dominio con las configuraciones de fragmentos anteriores para habilitar SSL

Paso 1:crear una configuración de fragmento con los detalles del certificado SSL

Vamos a crear un nuevo archivo de configuración de fragmentos, a saber, "self-signed.conf" para señalar los detalles de nuestro certificado autofirmado generado dentro de la carpeta de fragmentos de Nginx:/etc/nginx/snippets/ como a continuación:

# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

Aquí debemos especificar la ruta de nuestro certificado generado:/etc/ssl/certs/example.com.pem y Ruta de la clave:/etc/ssl/private/example.com.key para la directiva como se mencionó anteriormente.

Paso 2:creación de una configuración de fragmento para mantener una configuración de SSL fuerte y segura que supere las posibles vulnerabilidades de SSL

En segundo lugar, debemos mantener una configuración de servidor SSL sólida y totalmente funcional que proteja nuestro servidor de todas las posibles vulnerabilidades de SSL. Configuré mi Nginx con un sólido conjunto de cifrado SSL y habilité algunas funciones avanzadas para garantizar la seguridad del servidor. Todos estos parámetros están incluidos en el archivo:/etc/nginx/snippets/ssl-params.conf

cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

Puede obtener estas recomendaciones de cifrado de Nginx en la lista de cifrado. Estos parámetros se usarán en futuras configuraciones de Nginx para SSL. Como puede ver, hemos establecido el ssl_dhparam configuración para apuntar al archivo Diffie-Hellman que generamos anteriormente aquí. Dado que estamos utilizando un certificado autofirmado, el SSL stapling no se utilizará. Por lo tanto, lo he off de lo contrario, Nginx simplemente generará una advertencia como esta nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate . Después de realizar estos cambios, puede guardar la configuración y salir.

Paso 3:Actualizar el host virtual del dominio con las configuraciones de fragmentos anteriores para habilitar SSL

Estamos listos con nuestra configuración de fragmentos requeridos, ahora podemos incluirlos en nuestro host virtual de dominio y habilitar SSL. Aquí, en este artículo, estoy usando el archivo de configuración predeterminado de Nginx ubicado en /etc/nginx/sites-available/default . Modifiqué este archivo para habilitar SSL y obtener los certificados autofirmados generados. Consulte la sección modificada a continuación en esta configuración:

cat /etc/nginx/sites-available/default

#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;

Ahora podemos guardar estas configuraciones y reiniciar el servicio Nginx para que estos cambios sean efectivos.

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx

Pruebas

Este es nuestro paso final, donde podemos abrir nuestro navegador e intentar acceder a la IP de nuestro servidor en la URL>> https://Server_IP or Hostname . Mostrará una advertencia de seguridad ya que estamos usando un certificado autofirmado, puede ignorar esa advertencia y hacer clic para confirmar la seguridad para continuar como se muestra en la instantánea.

Lea también:

  • Mkcert:cree certificados SSL para el desarrollo local en Linux
  • Cómo instalar certificados Let's Encrypt SSL en Ubuntu 18.04
  • Cómo configurar NGINX como proxy inverso mediante Docker

¡Eso es todo! hemos configurado correctamente Nginx con un certificado autofirmado utilizando métodos de encriptación sólidos para conexiones de clientes seguras. ¡Espero que este artículo te sea útil! Publique sus valiosos comentarios y sugerencias al respecto.


Ubuntu
  1. Cómo instalar un certificado SSL autofirmado en cPanel

  2. Cómo crear una unidad USB de arranque de Ubuntu para Mac en OS X

  3. ¿Cómo hacer que Apache 2 deje de pedir una contraseña para un certificado SSL?

  4. Cómo crear un certificado SSL autofirmado en Ubuntu 18.04

  5. ¿Permisos para la clave SSL?

Cómo configurar el certificado Let's Encrypt SSL con Nginx en Ubuntu 18.04 y Ubuntu 16.04

Cómo generar una solicitud de firma de certificado (CSR) en Ubuntu

Cómo instalar un certificado SSL gratuito para Nginx en CentOS 8

Cómo instalar Let's Encrypt SSL para Nginx en Ubuntu 18.04 LTS

Cómo crear un certificado SSL autofirmado local en CentOS 8

¿Cómo habilitar la tecla Alt Gr como Alt R para Emacs en Ubuntu 16.04?