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


SSL (Secure Socket Layer) y su versión mejorada, TLS (Transport Socket Layer), son protocolos de seguridad que se utilizan para proteger el tráfico web enviado desde el navegador web de un cliente a un servidor web.

Un certificado SSL es un certificado digital que crea un canal seguro entre el navegador de un cliente y un servidor web. Al hacerlo, se cifran datos sensibles y confidenciales, como datos de tarjetas de crédito, credenciales de inicio de sesión y otra información altamente privada, lo que evita que los piratas informáticos espíen y roben su información.

Un certificado SSL autofirmado, a diferencia de otros certificados SSL que están firmados y son de confianza por una autoridad de certificación (CA), es un certificado firmado por una persona que lo posee.

Es totalmente gratuito crear uno y es una forma económica de cifrar su servidor web alojado localmente. Sin embargo, se desaconseja el uso de un certificado SSL autofirmado en entornos de producción por las siguientes razones:

  1. Dado que no está firmado por una autoridad de certificación, un certificado SSL autofirmado genera alertas en los navegadores web que advierten a los usuarios de un riesgo potencial en el futuro si deciden continuar. Estas alertas no son deseadas y disuadirán a los usuarios de visitar su sitio web, lo que podría provocar una disminución en el tráfico web. Como solución temporal a estas alertas, las organizaciones suelen animar a sus empleados a que simplemente ignoren las alertas y sigan adelante. Esto puede generar un hábito peligroso entre los usuarios que pueden decidir seguir ignorando estas alertas en otros sitios en línea, lo que podría convertirse en víctimas de sitios de phishing.
  2. Los certificados autofirmados tienen un nivel de seguridad bajo, ya que implementan hash y tecnologías de cifrado de bajo nivel. Por lo tanto, es posible que el nivel de seguridad no esté a la par con las políticas de seguridad estándar.
  3. Además, no se admiten las funciones de infraestructura de clave pública (PKI).

Dicho esto, el uso de un certificado SSL autofirmado no es una mala idea para probar servicios y aplicaciones en una máquina local que requiere cifrado TLS/SSL.

En esta guía, aprenderá a instalar un certificado SSL autofirmado local en el servidor web Apache localhost en un sistema de servidor CentOS 8.

Antes de comenzar, asegúrese de tener los siguientes requisitos básicos:

  1. Una instancia del servidor CentOS 8.
  2. Servidor web Apache instalado en el servidor
  3. Un nombre de host ya configurado y definido en el archivo/etc/hosts. Para esta guía, usaremos tecmint.local un nombre de host para nuestro servidor.

Paso 1: Instalar Mod_SSL en CentOS

1. Para comenzar, debe verificar que el servidor web Apache esté instalado y funcionando.

$ sudo systemctl status httpd

Aquí está el resultado esperado.

Si el servidor web no se está ejecutando, puede iniciarlo y habilitarlo al arrancar usando el comando.

$ sudo systemctl start httpd
$ sudo systemctl enable httpd

A partir de entonces, puede confirmar si Apache está funcionando.

2. Para habilitar la instalación y configuración del certificado SSL autofirmado local, se requiere el paquete mod_ssl.

$ sudo dnf install mod_ssl

Una vez instalado, puede verificar su instalación ejecutando.

$ sudo rpm -q mod_ssl

Además, asegúrese de que el paquete OpenSSL esté instalado (OpenSSL viene instalado de forma predeterminada en CentOS 8).

$ sudo rpm -q openssl 

Paso 2: Cree un certificado SSL autofirmado local para Apache

3. Con el servidor web Apache y todos los prerrequisitos bajo control, necesita crear un directorio dentro del cual se almacenarán las claves criptográficas.

En este ejemplo, hemos creado un directorio en/etc/ssl/private.

$ sudo mkdir -p /etc/ssl/private

Ahora cree la clave y el archivo del certificado SSL local usando el comando:

$ sudo openssl req -x509 -nodes -newkey rsa:2048 -keyout tecmint.local.key -out tecmint.local.crt

Echemos un vistazo a lo que realmente significan algunas de las opciones del comando:

  • req -x509: esto indica que estamos utilizando la solicitud de firma de certificado (CSR) x509.
  • -nodes: esta opción indica a OpenSSL que omita el cifrado del certificado SSL mediante una frase de contraseña. La idea aquí es permitir que Apache pueda leer el archivo sin ningún tipo de intervención del usuario, lo que no sería posible si se proporciona una frase de contraseña.
  • -newkey rsa: 2048 - Esto indica que queremos crear simultáneamente una nueva clave y un nuevo certificado. La parte rsa: 2048 implica que queremos crear una clave RSA de 2048 bits.
  • -keyout: esta opción especifica dónde almacenar el archivo de clave privada generado al momento de la creación.
  • -out: la opción especifica dónde colocar el certificado SSL creado.

Paso 3: Instale el certificado SSL autofirmado local en Apache

4. Habiendo generado el archivo de certificado SSL, es el momento de instalar el certificado usando la configuración del servidor web Apache. Abra y edite el archivo de configuración /etc/httpd/conf.d/ssl.conf.

$ sudo vi /etc/httpd/conf.d/ssl.conf

Asegúrese de tener las siguientes líneas entre las etiquetas de host virtual.

<VirtualHost *:443>
    ServerAdmin [email protected]
    ServerName www.tecmint.local
    ServerAlias tecmint.local
 
    DocumentRoot /var/www/html
 
    SSLEngine on
    SSLCertificateFile /etc/ssl/private/tecmint.local.crt
    SSLCertificateKeyFile /etc/ssl/private/tecmint.local.key
</VirtualHost>

Guardar y salir del archivo. Para que se efectúen los cambios, reinicie Apache usando el comando:

$ sudo systemctl restart httpd

5. Para que los usuarios externos accedan a su servidor, debe abrir el puerto 443 a través del firewall como se muestra.

$ sudo firewall-cmd --add-port=443 --zone=public --permanent
$ sudo firewall-cmd --reload

Paso 3: Prueba del certificado SSL autofirmado local en Apache

Con todas las configuraciones en su lugar, encienda su navegador y busque la dirección de su servidor usando la dirección IP del servidor o el nombre de dominio usando el protocolo https.

Para simplificar las pruebas, puede considerar redirigir el protocolo HTTP a HTTPS en el servidor web Apache. Esto es para que cada vez que navegue por el dominio en HTTP simple, se redirigirá automáticamente al protocolo HTTPS.

Navegue por el dominio o la IP de su servidor

https://domain_name/

Recibirá una alerta que le informará que la conexión no es segura como se muestra. Esto variará de un navegador a otro. Como puede adivinar, la alerta se debe al hecho de que el certificado SSL no está firmado por la autoridad de certificación y el navegador lo registra e informa que no se puede confiar en el certificado.

Para ir a su sitio web, haga clic en la pestaña "Avanzado" como se muestra arriba:

A continuación, agregue la excepción al navegador.

Finalmente, vuelva a cargar su navegador y observe que ahora puede acceder al servidor, aunque habrá una advertencia en la barra de URL que el sitio no es completamente seguro por la misma razón que el certificado SSL es autofirmado y no firmado por el Autoridad certificada.

Esperamos que ahora pueda continuar y crear e instalar un certificado SSL autofirmado en el servidor web Apache localhost en CentOS 8.