Serie RHCE: Implementación de HTTPS a través de TLS usando Network Security Service (NSS) para Apache - Parte 8


Si usted es un administrador de sistemas que está a cargo de mantener y asegurar un servidor web, no puede permitirse el lujo de no dedicar sus mejores esfuerzos para garantizar que los datos que se proporcionan o que pasan por su servidor estén protegidos en todo momento.

Para proporcionar comunicaciones más seguras entre clientes y servidores web, el protocolo HTTPS nació como una combinación de HTTP y SSL (Secure Sockets Layer) o, más recientemente, TLS (Transport Layer Security).

Debido a algunas brechas de seguridad graves, SSL ha quedado obsoleto en favor del TLS más robusto. Por esa razón, en este artículo explicaremos cómo proteger las conexiones entre su servidor web y los clientes mediante TLS.

Este tutorial asume que ya ha instalado y configurado su servidor web Apache. De lo contrario, consulte el siguiente artículo de este sitio antes de continuar.

  1. Instale LAMP (Linux, MySQL/MariaDB, Apache y PHP) en RHEL/CentOS 7

Instalación de OpenSSL y utilidades

En primer lugar, asegúrese de que Apache se esté ejecutando y que tanto http como https estén permitidos a través del firewall:

# systemctl start http
# systemctl enable http
# firewall-cmd --permanent –-add-service=http
# firewall-cmd --permanent –-add-service=https

Luego instale los paquetes necesarios:

# yum update && yum install openssl mod_nss crypto-utils

Importante: tenga en cuenta que puede reemplazar mod_nss con mod_ssl en el comando anterior si desea usar bibliotecas OpenSSL en lugar de NSS (Servicio de seguridad de red) para implementar TLS (cuál usar queda totalmente en sus manos, pero nosotros usaremos NSS en este artículo ya que es más robusto; por ejemplo, es compatible con estándares de criptografía recientes como PKCS # 11).

Finalmente, desinstale mod_ssl si elige usar mod_nss, o viceversa.

# yum remove mod_ssl

Configuración de NSS (servicio de seguridad de red)

Después de instalar mod_nss, su archivo de configuración predeterminado se crea como /etc/httpd/conf.d/nss.conf. Luego debe asegurarse de que todas las directivas Listen y VirtualHost apunten al puerto 443 (puerto predeterminado para HTTPS):

Listen 443
VirtualHost _default_:443

Luego reinicie Apache y verifique si el módulo mod_nss se ha cargado:

# apachectl restart
# httpd -M | grep nss

A continuación, se deben realizar las siguientes ediciones en el archivo de configuración /etc/httpd/conf.d/nss.conf :

1. Indique el directorio de la base de datos NSS. Puede utilizar el directorio predeterminado o crear uno nuevo. En este tutorial usaremos el predeterminado:

NSSCertificateDatabase /etc/httpd/alias

2. Evite la entrada manual de la frase de contraseña en cada inicio del sistema guardando la contraseña en el directorio de la base de datos en /etc/httpd/nss-db-password.conf:

NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

Donde /etc/httpd/nss-db-password.conf contiene SÓLO la siguiente línea y mypassword es la contraseña que establecerá más adelante para la base de datos NSS:

internal:mypassword

Además, sus permisos y propiedad deben establecerse en 0640 y root: apache, respectivamente:

# chmod 640 /etc/httpd/nss-db-password.conf
# chgrp apache /etc/httpd/nss-db-password.conf

3. Red Hat recomienda deshabilitar SSL y todas las versiones de TLS anteriores a TLSv1.0 debido a la vulnerabilidad POODLE SSLv3 (más información aquí).

Asegúrese de que cada instancia de la directiva NSSProtocol se lea de la siguiente manera (es probable que encuentre solo una si no está alojando otros hosts virtuales):

NSSProtocol TLSv1.0,TLSv1.1

4. Apache se negará a reiniciarse ya que se trata de un certificado autofirmado y no reconocerá al emisor como válido. Por esta razón, en este caso particular tendrás que agregar:

NSSEnforceValidCerts off

5. Aunque no es estrictamente necesario, es importante establecer una contraseña para la base de datos NSS:

# certutil -W -d /etc/httpd/alias