Cómo configurar SSL/TLS con Apache Httpd en Red Hat

Cómo configurar SSL/TLS con Apache Httpd en Red Hat

Objetivo

El objetivo es configurar el servidor web de Apache con soporte SSL/TLS en Red Hat Linux, utilizando los paquetes enviados con la distribución.

Sistema operativo y versiones de software

  • Sistema operativo: Red Hat Enterprise Linux 7.5
  • Software: Apache httpd, mod_ssl

Requisitos

Acceso privilegiado al servidor web.

Dificultad

FÁCIL

Convenciones

  • # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
  • ps - Dados los comandos de Linux para ser ejecutados como un usuario regular no privilegiado

Introducción

Instalar un servidor web es bastante fácil en las distribuciones modernas, ya que los casos de uso de un servidor web son tan comunes que la mayoría de las distribuciones, si no todas, proporcionan paquetes en sus repositorios. Apache httpd es un servidor web confiable utilizado por una gran parte de Internet, y muchos módulos están disponibles para extender su funcionalidad.

Las noticias tecnológicas en estos días están llenas de violaciones de seguridad, robo/fuga de datos y una necesidad creciente de usar el cifrado
donde es posible. Si bien el uso de HTTPS tiene una cierta sobrecarga de computación tanto en el lado del servidor como en el cliente, no usarlo significa que todos los datos enviados en ambas direcciones son de texto claro, legible por cualquier persona que pueda leer el tráfico mientras pasa a través de la red.

Suponga que tiene un servicio web donde los clientes pueden iniciar sesión utilizando su nombre de usuario y contraseña, un método de autenticación común, para llegar a sus propios datos, incluidos los administradores del sitio. Si proporciona este servicio a través de HTTP, se puede registrar toda esta información, para que alguien pueda obtener todas las credenciales de inicio de sesión, iniciar sesión como administrador del sitio y bloquear a los administradores reales o publicar contenido dañino para los visitantes.

La capacidad de usar el cifrado mientras navegan se incorpora a todos los principales navegadores modernos durante mucho tiempo, y la misma forma en que el cifrado está disponible para los servidores web durante muchos años.



Instale el servidor web de Apache con soporte SSL/TLS

Para instalar los paquetes requeridos, simplemente ejecute como root:

# yum install httpd mod_ssl -y

Si el servidor ya tiene httpd instalado, solo necesita instalar mod_ssl, Toda la configuración requerida está realizada
por el instalador. Sin embargo, tenga en cuenta que en este caso necesita reiniciar HTTPD, por lo que puede cargar el módulo SSL. Mediante el uso
Los paquetes enviados con la distribución, podemos hacer que nuestra vida sea mucho más fácil, ya que Red Hat proporcionará actualizaciones correctamente probadas tanto para el sistema operativo como para el servidor web, por supuesto, necesita una suscripción para recibir las actualizaciones, pero se necesitan actualizaciones para el Sistema operativo de todos modos para mantenerse actualizado.

Habilitar e iniciar el servidor HTTPD

Usando SystemD, puede habilitar e iniciar el servidor web con el siguiente comando:

# SystemCTL enable httpd && systemctl iniciar httpd

De esta manera, el servicio HTTPD será iniciado automáticamente por Systemd en cada arranque.

Verificar la instalación y el estado

Puede verificar el estado del servidor web usando Systemd:

# systemCTL status httpd -l ● httpd.Servicio: el servidor apache http cargado: cargado (/usr/lib/systemd/system/httpd.servicio; activado; Vendor Preset: Discapaced) Activo: Activo (Running) desde SAT 2018-07-07 21:35:33 CEST; 1 semanas Hace 4 días Docios: Hombre: Httpd (8) Hombre: Apachectl (8) PID principal: 1292 (httpd) Estado: "Solicitudes totales: 0; Solicitudes actuales/sec: 0; Tráfico actual: 0 b/seg" Tareas " : 9 cgroup: /sistema.rebanada/httpd.servicio ├─ 1292/usr/sbin/httpd -dforeground ├─13271/usr/sbin/httpd -dforeground ├─13272/usr/sbin/httpd -dforeground ├─13273/usr/sbin/httpd -dforeground ├─27508/usr/usr /sbin/httpd -dforeground ├─27509/usr/sbin/httpd -dforeground ├─27510/usr/sbin/httpd -dforeground ├─27511/usr/sbin/httpd -dForErter 07 de julio 21:35:32 Web.foobar.COM Systemd [1]: Iniciar el servidor Apache HTTP .. . 07 de julio 21:35:33 Web.foobar.com systemd [1]: inició el servidor Apache HTTP. 
Copiar

Para verificar que MOD_SSL esté instalado correctamente:

# rpm -q mod_ssl mod_ssl -2.4.6-80.El7.x86_64 
Copiar

Y se carga como un módulo en el servidor HTTPD:

# apachectl -m | GREP SSL SSL_MODULE (compartido) 
Copiar

Uso de certificados

Cuando instalamos el paquete MOD_SSL, el módulo se suma al servidor HTTPD, por lo que lo cargará en el inicio siguiente.
Un certificado autofirmado se genera de forma predeterminada, que se utiliza para establecer una conexión encriptada con el navegador.
Abra un navegador y apírtelo al servidor a través de HTTPS:

Mensaje de error SSL en el navegador Firefox

Ignoremos esto por ahora, agregue la excepción de seguridad (no configure "almacene permanentemente esta excepción") y continúe. Aparece la página predeterminada. En el caso de Red Hat, esto parece de la siguiente manera:

Página de inicio predeterminada de una instalación de servidor web HTTPD en Red Hat Linux

Tenga en cuenta el punto de exclamación junto a la URL (otros navegadores pueden mostrar una advertencia diferente).

Nuestro servidor web ahora está en funcionamiento sobre HTTPS con un certificado autofirmado y está listo para servir contenido publicado
bajo /var/www/html, La raíz de contenido predeterminada del servidor web en Red Hat.

La conexión entre el servidor web y el navegador ahora está encriptada, por lo que es más difícil falsificar el tráfico (que
se puede usar, por ejemplo, robar credenciales de inicio de sesión). Terminamos? En cierto modo, completamos nuestro objetivo.

El hecho de que nuestro navegador no pueda identificar el certificado del servidor como válido no evita que use la comunicación cifrada con el servidor, si decidimos explícitamente que confiamos en este certificado. Esto puede ser adecuado para un pequeño sistema (de inicio), donde solo tiene unos pocos usuarios, así como solo unos pocos servidores web: debe aceptar el certificado autofirmado en navegadores que deberían ser clientes de los servidores web y cualquier otro El navegador en el mundo nunca debe ver el contenido proporcionado por estos servidores.

Tenga en cuenta que este certificado autofirmado caducará a tiempo (como cualquier otro certificado debería), y tendrá
para renovarlo para usarlo. Los certificados caducados son considerados inválidos por los navegadores, de la misma manera que los certificados que no pueden ser válidos por una cadena de certificados válida por encima de ellos.

Para averiguar cuándo expirará el certificado autofirmado (o cualquier otro), tenemos que encontrarlo en el sistema de archivos consultando el archivo de configuración del módulo SSL:

# grep sslcertificateFile/etc/httpd/conf.D/SSL.conf | GREP -V "#" SSLCERTIFICATEFILE/ETC/PKI/TLS/CERTS/LOCALHOST.CRT 
Copiar

Y luego use OpenSSL para obtener la fecha de vencimiento:

# OpenSSL x509 -Enddate -NOOUT -In/ETC/PKI/TLS/CERTS/LOCALHOST.CRT notafter = 10 de julio 07:06:17 2019 GMT 
Copiar

Después de (o más bien, antes) el certificado expira, debe renovarlo o reemplazarlo con un certificado de confianza de los clientes. A
Un enfoque más elegante en contraste con los certificados autofirmados es solicitar y usar un certificado de una CA
(Autoridad de certificado) Sus clientes ya confían, ya sea de su CA interna (que a su vez puede tener un a nivel mundial
raíz de confianza CA por encima de él), o directamente de una CA con confianza a nivel mundial.

Para usar el certificado obtenido en lugar del valor predeterminado, los parámetros a continuación deben apuntar al archivo de certificado, el
clave de certificado y el certificado de la CA que firmó el certificado SSL, respectivamente. Los archivos deben copiarse en
el servidor web, y debe ser legible por el usuario del sistema operativo que ejecuta el servidor web, en el caso de una instalación predeterminada de Red Hat, el usuario de Apache. Estos parámetros se pueden encontrar en los mencionados anteriormente ssl.confusión.

SslCertificateFile/etc/httpd/Custom-CERT/Server-SSL.CRT SSLCertificAtekeyFile/Etc/Httpd/Custom-Cert/Server-SSL.clave sslcacertificateFile/etc/httpd/personalizado-cert/ca.CRT 


Redirigir el tráfico HTTP a HTTPS

Ahora que servimos a través de HTTPS, podemos hacer cumplir el uso de HTTPS mientras servimos todo o parte de nuestro contenido. En nuestro
Ejemplo, somos muy seguros y usamos HTTP solo para redirigir a los clientes entrantes a HTTPS.

Puede surgir una pregunta, si queremos hablar solo https, ¿por qué escuchamos http en absoluto?? Supongamos que un usuario final, que acaba de hablar de nuestro sitio, y recibió una URL de un amigo que no contiene el protocolo. Hasta el día de hoy, la mayoría de los navegadores predeterminados al protocolo HTTP, si uno no se especifica explícitamente. Si dejamos de servir a través de HTTP, el usuario que escribe la URL sin HTTPS recibirá un mensaje de error si su navegador intenta llegar a nuestro servidor a través de HTTP.

Para redirigir todas las solicitudes HTTP entrantes a HTTPS, creamos un archivo en /etc/httpd/conf.d con un nombre descriptivo, digamos, redirect_http.confusión con el siguiente contenido (donde web.foobar.com es el nombre DNS del sitio):

 Servidor Name Web.foobar.com Redirect Permanent/https: // web.foobar.com/  

Y reiniciar el servidor web. Podemos probar si la redirección funciona correctamente desde la línea de comando con WGet (desde un host que confía en el certificado SSL del servidor web):

$ wget http: // web.foobar.com/--2018-07-19 16: 13: 01-- http: // web.foobar.com/ resolución web.foobar.com (web.foobar.com) .. . 10.9.8.7 Conectarse a la web.foobar.com (web.foobar.com) | 10.9.8.7 |: 80 .. . conectado. Solicitud de HTTP enviada, en espera de respuesta .. . 301 movido permanentemente Ubicación: https: // web.foobar.com/[siguiente] --2018-07-19 16: 13: 01-- https: // web.foobar.com/ conectarse a la web.foobar.com (web.foobar.com) | 10.9.8.7 |: 443 .. . conectado. Solicitud de HTTP enviada, en espera de respuesta .. . 200 OK Longitud: 240 [texto/html] Guardar a: 'Índice.html '100%[=============================================== =======================================>] 240 --.-K/S en 0s 2018-07-19 16:13:01 (7.04 MB/s) - 'Índice.html 'guardado [240/240] 
Copiar

La salida muestra la respuesta HTTP 301, y podemos ver cómo nuestro cliente WGET sigue la redirección para conectarse usando el protocolo HTTPS. Por defecto, el tráfico SSL se registra en diferentes archivos de registro y luego el tráfico HTTP. Podemos encontrar lo anterior
Solicitud iniciada /var/log/httpd/ssl_access_log:

10.9.8.8 - - [19/julio/2018: 16: 13: 01 +0200] "Get/http/1.1 "200 240

Conclusión

Con esto hemos completado nuestro objetivo, configuramos un servidor web que usa HTTPS para hablar con los clientes, y redirige las solicitudes HTTP entrantes a HTTPS también.

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Descarga de Linux
  • Archivos de configuración de Linux: los 30 principales más importantes
  • ¿Puede Linux obtener virus?? Explorando la vulnerabilidad de Linux ..
  • Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
  • La mejor distribución de Linux para desarrolladores
  • Comandos de Linux: los 20 comandos más importantes que necesitas ..
  • Guía de solución de problemas GNU/Linux General para principiantes
  • MX Linux vs Ubuntu