Búsqueda de sitios web

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.

  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 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