Red de conocimiento informático - Material del sitio web - Cómo convertir un clúster web de HTTP a HTTPS

Cómo convertir un clúster web de HTTP a HTTPS

1. Descripción general

Si su aplicación usa certificados SSL, debe decidir cómo usarlos en el balanceador de carga.

Una configuración simple de un único servidor generalmente considera cómo el servidor que recibe la solicitud decodifica la conexión SSL del cliente. Dado que el equilibrador de carga se encuentra entre el cliente y más servidores, la decodificación de la conexión SSL se convierte en el centro de atención.

2. Hay dos estrategias principales.

El primero es el modo que seleccionamos. SSL está configurado en haproxy para que podamos continuar usando el equilibrio de carga de siete capas. Conexión SSL terminada en el balanceador de carga haproxy -> Decodificar la conexión SSL y enviar una conexión no cifrada a la aplicación backend tomcat significa que el balanceador de carga es responsable de decodificar la conexión SSL, a diferencia del paso SSL que envía directamente a la conexión SSL del servidor proxy.

El segundo utiliza la penetración SSL. La conexión SSL finaliza en cada servidor Tomcat, lo que distribuye la carga de la CPU al servidor Tomcat. Sin embargo, esto hará que pierda la capacidad de agregar o modificar encabezados HTTP, ya que la conexión simplemente se enruta desde el balanceador de carga al servidor Tomcat, lo que significa que el servidor de aplicaciones perderá la capacidad de obtener el encabezado X-Forwarded-*. , que contiene la dirección IP del cliente, el puerto y el protocolo utilizado.

Hay dos combinaciones de políticas, la tercera, donde la conexión SSL finaliza en el balanceador de carga, se ajusta según sea necesario y luego se usa como proxy para nuevas conexiones SSL al servidor backend. Esto proporciona máxima seguridad y la capacidad de enviar información del cliente. El costo de esto es un mayor consumo de energía de la CPU y una configuración un poco más compleja.

La estrategia que elija dependerá de usted y de las necesidades de su aplicación. La terminación de SSL es la estrategia más típica que he visto, pero la penetración de SSL probablemente sea más segura.

3. Utilice HAProxy como terminal SSL.

Primero, presentaremos la solución más típica: el terminal SSL. Como se mencionó anteriormente, debemos permitir que el balanceador de carga maneje las conexiones SSL. Esto significa colocar el certificado SSL en el servidor de equilibrio de carga.

Recuerde que los certificados SSL utilizados en producción (a diferencia de los autofirmados) no requieren que usted los genere ni los firme, solo necesita crear una Solicitud de firma de certificado (CSR) y entregársela al organización donde compró el certificado.

Primero, creamos un certificado autofirmado como demostración y utilizamos el mismo certificado localmente.

OpenSSL gen RSA-out/etc/ha proxy/wzlinux key 2048

OpenSSL req-new-key/etc/ha proxy/wzlinux key-out/etc/ha. proxy/wzlinux . CSR

gtNombre del país (código de 2 letras) [AU]: CN

gtNombre del estado o provincia (nombre completo) [Estado parcial]: Shanghai

gt Nombre del lugar (por ejemplo, ciudad) []: Shanghai

gt Nombre de la organización (por ejemplo, empresa) [Internet Widgits Pte Ltd]: wzlinux

gt Organización Nombre de la organización (por ejemplo, departamento) ) []:

gt Nombre común (por ejemplo, FQDN del servidor o su nombre) []: www.wzlinux.com

gt Dirección de correo electrónico [] :

gtPor favor ingrese los siguientes atributos "adicionales" y envíelos con la solicitud de certificado

gtPregunta contraseña []:

gtNombre de empresa opcional []:

cd /etc /haproxy

OpenSSL x509-req-days 3655-in wzlinux . CSR-sign key wzlinux . key-out CRT

Estos archivos wzlinux.csr, wzlinux.key, y se generará wzlinux.crt.

Luego, después de crear el certificado, necesitamos crear el archivo pem. Un archivo Pem es esencialmente un archivo que consta de un certificado, una clave y, opcionalmente, un certificado de autoridad certificadora. En nuestro ejemplo, simplemente unimos los archivos de certificado y clave en este orden para crear el archivo wzlinux.pem. Esta es la forma preferida de HAProxy de leer certificados SSL.

Caterpillar wzlinux.crt wzlinux.key | tee wzlinux.pem

Cuando compra un certificado auténtico, es posible que no pueda obtener los archivos empalmados. Puedes empalmarlo tú mismo. Sin embargo, muchas instituciones también le proporcionarán un documento empalmado. Si no obtiene el archivo empalmado, es posible que no sea un archivo pem, sino un paquete, certificado, certificado, archivo clave o algunos archivos con el mismo concepto pero nombres similares.

De todos modos, siempre que obtenga el archivo pem utilizado por HAProxy, podrá manejar conexiones SSL con una configuración simple.

A continuación, configuraremos haproxy para instalar el certificado SSL. El archivo de configuración es el siguiente.

# -

#Ejemplos de configuraciones para posibles aplicaciones web. Ver

#Ver opciones completas de configuración online.

#

# De forma predeterminada, todas las secciones de "escucha" y "backend" de mon

# se utilizarán si no se especifican en su bloque

# -

Predeterminado

Modo http

Registro global

Opciones httplog

opción dontlognull

opción http-server-off

opción reenviar excepto 127.0.0.0/8

opción reprogramar

opción httpcerrar

Reintentar 3 veces

Tiempo de espera de solicitud http 10s

Tiempo de espera de cola 1m

Tiempo de espera de conexión 10s

Tiempo de espera del cliente 1m

Tiempo de espera del servidor 1m

Tiempo de espera http-keep live 10s

Tiempo de espera de verificación 10 segundos

Estadísticas habilitadas

p>

Estadísticas ocultas -versión

estadísticas uri /haproxy? Estado

Campo de estadísticas Haproxy\statistics

Gestión de autorización de estadísticas: asd870719

# administrador de estadísticas si es verdadero

# -

#Frontal principal del backend del proxy

# -

#Frontend principal*: 5000

# URL de ACL _ ruta estática _ inicio-I/ estática /images/JavaScript/stylesheet

# acl url_static path_end -i .jpg. gif. png. css.

Jet Research...

#Si url_static, use _backend static

# aplicación _backend predeterminada

Frontend wzlinux_ssl

bind *: 80

bind*: 443 SSL CRT/etc/ha proxy/wzlinux .PEM

Modo http

Default_backend wzlinux

# -

#Backend estático para servir imágenes, hojas de estilo, etc.

# -

#Backend estático

#round robin equilibrado

#Servidor estático 127. 0. 0. 1: 4331 comprobación

Backend wzlinux

Modo http

Round robin equilibrado

Opción reenviar a

# opción httpchk HEAD/HTTP/1.1\r\nHost:localhost

Servidor wzlinux 01 10. 0. 0. 9: 8080 check inter 15000 up 2 abajo 4

Servidor wzlinux 02 10.0.0.9: 8081 cheque interés 15000 arriba 2 abajo 4

Servidor wzlinux03 10.0.0.9: 8082 Cheque inter 15000 arriba 2 abajo 4

Servidor wzlinux04 10.0.0.9: 8083 check inter 15000 arriba 2 abajo 4

Servidor wzlinux05 10.0.0.9: 8084 check inter 15000 arriba 2 abajo 4

Servidor wzlinux06 10.0.0.9: 8085 check inter 15000 arriba 2 abajo 4

Servidor wzlinux07 10.0.0.9: 8086 check inter 15000 arriba 2 abajo 4

# http -request-set-header-X-forwarded-port [dst_port]

# http-request add-header finalizó en el balanceador de carga, por lo que aún enviamos solicitudes HTTP normales al servidor backend.

Solo aceptar conexiones SSL

Si desea que el sitio web solo acepte conexiones SSL, puede agregar una redirección a la configuración del frontend:

Frontend wzlinux_ssl

p>

bind*: 80

bind*: 443 SSL CRT/etc/ha proxy/wzlinux .PEM

Esquema de redireccionamiento https if! { ssl_fc }

mode http

default_backend wzlinux

Arriba, agregamos una guía de redireccionamiento que redirigirá la conexión si no es a través de SSL, redirecciones http a https .

4. Utilice HAProxy para lograr la penetración SSL.

Con la penetración de SSL, dejaremos que el servidor backend maneje la conexión SSL en lugar del balanceador de carga.

El trabajo del balanceador de carga es simplemente reenviar solicitudes a los servidores backend configurados. Debido a que la conexión permanece cifrada, HAProxy sólo puede reenviarla a otros servidores y nada más.

En esta configuración, ya sea una configuración front-end o una configuración back-end, necesitamos usar el modo TCP en lugar del modo HTTP.

HAProxy solo reenviará conexiones como una secuencia a otros servidores y no utilizará funciones que solo se puedan usar en solicitudes HTTP.

Primero, ajustemos la configuración del front-end:

Frontal wzlinux_ssl

bind*: 80

bind*: 443

Opciones tcplog

Modo tcp

Default_backend wzlinux

Los puertos 80 y 443 todavía están vinculados simultáneamente para garantizar conexiones HTTP y SSL normales obras.

Como se mencionó anteriormente, para reenviar una conexión segura sin ser decodificada por el servidor, necesitamos usar el modo TCP. Esto también significa que debemos configurar registros tcp en lugar de los registros http predeterminados (opción de registro tcp).

A continuación, debemos ajustar la configuración del backend. Tenga en cuenta que tenemos que cambiarlo al modo TCP y eliminar algunas directivas para evitar conflictos debido a la modificación/adición de funciones de encabezado HTTP:

backend wzlinux

modo tcp

Saldo round robin

Opción ssl-hello-chk

Servidor wzlinux 01 10.0.0.9:8080 check inter 15000 arriba 2 abajo 4

Servidor wzlinux 02 10 0. 0. 9: 8081 comprobar interés 15000 arriba 2 abajo 4

Servidor wzlinux03 10.0.0.9: 8082 comprobar inter 15000 arriba 2 abajo 4

Servidor wzlinux04 10.0.0.9: 8083 check inter 15000 arriba 2 abajo 4

Servidor wzlinux05 10.0.0.9: 8084 check inter 15000 arriba 2 abajo 4

Servidor wzlinux06 10.0.0.9: 8085 Check inter 15000 arriba 2 abajo 4

Servidor wzlinux07 10.0.0.9:8086 Verifique inter 15000 arriba 2 abajo 4

Como puede ver, está configurado en modo tcp: la interfaz y todas las configuraciones de fondo deben configurarse en este modo.

También eliminamos las opciones forwardfor y http-request; estas no se pueden usar en modo TCP, ni pueden agregar encabezados a solicitudes cifradas, y algunas configuraciones predeterminadas anteriores también eliminaron la configuración http, que no demostrarse aquí.

Para comprobar si es correcto, podemos usar ssl-hello-chk para comprobar la conexión y su capacidad para manejar conexiones SSL (especialmente SSLv3).

En este ejemplo, construí dos servidores backend que aceptan certificados SSL. Si ha leído sobre los certificados SSL, habrá visto cómo integrarlos en Apache o Nginx para crear un servidor web backend para manejar las comunicaciones SSL. Con el cruce SSL, no es necesario crear ni utilizar un certificado SSL para HAProxy. El servidor backend puede manejar conexiones SSL como si solo hubiera un servidor y no se utilizara ningún equilibrador de carga.