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, los datos sensibles y confidenciales, como datos de tarjetas de crédito, credenciales de inicio de sesión y otra información altamente privada, se cifran, 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. Since it’s not signed by a Certificate Authority, a self-signed SSL certificate generates alerts on web browsers warning users of potential risk ahead should they decide to proceed. These alerts are undesired and will dissuade users from visiting your website, potentially leading to a decline in web traffic. As a workaround to these alerts, organizations usually encourage their employees to simply ignore the alerts and proceed ahead. This may spawn a dangerous habit among users who may decide to continue ignoring these alerts on other online sites, potentially falling victim to phishing sites.
  2. Self-signed certificates have a low-security level since they implement low-level cipher technologies and hashes. Thus the security level may not be at par with standard security policies.
  3. Additionally, there’s no support for Public Key Infrastructure (PKI) functions.

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. An instance of the CentOS 8 server.
  2. Apache webserver installed on the server
  3. A hostname already configured and defined in the /etc/hosts file. For this guide, we are going to use tecmint.local a hostname for our server.

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 por defecto 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 requisitos previos controlados, debe crear un directorio en el que 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 – This indicates that we are using the x509 Certificate Signing Request (CSR).
  • -nodes – This option instructs OpenSSL to skip encrypting the SSL certificate using a passphrase. The idea here is to allow Apache to be able to read the file without any kind of user intervention which would not be possible if a passphrase is provided.
  • -newkey rsa:2048 – This indicates that we want to simultaneously create a new key and a new certificate. The rsa:2048 portion implies that we want to create a 2048-bit RSA key.
  • -keyout – This option specifies where to store the generated private key file upon creation.
  • -out – The option specifies where to place the created SSL certificate.

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 /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/private/tecmint.local.crt
    SSLCertificateKeyFile /etc/private/tecmint.local.key
</VirtualHost>

Guardar y salir del archivo. Para que los cambios se efectúen, 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 informándole 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 de 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.