Serie RHCE: Implementación de HTTPS a través de TLS usando el Servicio de seguridad de red (NSS) para Apache - Parte 8
Si usted es un administrador de sistemas que está a cargo de mantener y proteger un servidor web, no puede permitirse el lujo de no dedicar sus mejores esfuerzos para garantizar que los datos servidos por su servidor o que pasan por él estén protegidos en todo momento.
Para proporcionar comunicaciones más seguras entre clientes y servidores web, nació el protocolo HTTPS como una combinación de HTTP y SSL ( Secure Sockets Layer) o más recientemente, TLS (Transport Layer Security).
Debido a algunas violaciones de seguridad graves, SSL ha quedado obsoleto en favor de TLS, más sólido. 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.
- 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 por mod_ssl en el comando anterior si desea utilizar Bibliotecas OpenSSL en lugar de NSS (Servicio de seguridad de red) para implementar TLS (cuál usar depende totalmente de usted). , pero usaremos NSS en este artículo porque es más robusto; por ejemplo, admite estándares de criptografía recientes como PKCS #11).
Finalmente, desinstale mod_ssl si elige utilizar 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 debes asegurarte 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. Indica el directorio de la base de datos NSS. Puede utilizar el directorio predeterminado o crear uno nuevo. En este tutorial usaremos el valor predeterminado:
NSSCertificateDatabase /etc/httpd/alias
2. Evite el ingreso manual de una frase de contraseña en cada sistema. Comience 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 diga lo siguiente (es probable que solo encuentre una si no aloja 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 este motivo, en este caso particular tendrás que agregar:
NSSEnforceValidCerts off
5. Aunque no es estrictamente obligatorio, es importante establecer una contraseña para la base de datos NSS:
certutil -W -d /etc/httpd/alias