Configuración de SSL o TLS para HAProxy
Se puede configurar SSL o TLS para HAProxy al utilizar la alta disponibilidad de agrupación de ThingWorx:
HAProxy se puede configurar para SSL externo y SSL interno. Se deben proporcionar los ficheros de certificado. No se puede utilizar SSL de acceso directo porque ThingWorx requiere acceso al objeto de solicitud para la distribución basada en la ruta. Hay muchas opciones para configurar SSL en HAProxy. Lo siguiente es solo a modo de referencia; para obtener más información, consulte https://cbonte.github.io/haproxy-dconv/2.0/configuration.html.
* 
Si SELinux bloquea HAProxy, ajuste las configuraciones de SELinux según corresponda.
SSL externo de clientes a HAProxy
En la configuración de global, se pueden configurar ubicaciones por defecto opcionales para certificados y claves privadas. En la configuración de front-end, se pueden configurar los cifrados y los niveles de TLS soportados. Por ejemplo:
global
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
Sin ninguna configuración de TLS adicional, HAProxy elegirá automáticamente un conjunto de cifrado en función del cliente y los conjuntos de cifrado disponibles de HAProxy.
Para verificar qué versión de TLS soporta una versión específica de HAProxy, ejecute el comando haproxy-vv.
[root@hasrv]# haproxy -vv
Omitted output.

Built with OpenSSL version : OpenSSL 1.1.1k FIPS 25 Mar 2021
Running on OpenSSL version : OpenSSL 1.1.1k FIPS 25 Mar 2021
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3

Omitted output.
Se puede ver que HAProxy se compila con la biblioteca de OpenSSL 1.1.1k. Por lo tanto, HAProxy tiene cifrados con capacidad para TLSv1.3, lo que significa que si el cliente tiene las mismas capacidades, la comunicación TLS será TLSv1.3.
* 
Se recomienda utilizar la versión de HAProxy creada con OpenSSL 1.1.1 o superior. Las versiones anteriores de OpenSSL no soportaban TLSv1.3.
Para configurar los cifrados manualmente, consulte los valores de configuración relacionados:
ssl-default-bind-ciphers: para el valor máximo de TLSv1.2 del front-end. Cualquier cifrado con capacidad TLSv1.3/TLSv1.2 funcionará en modo TLSv1.2.
ssl-default-bind-ciphersuites: para front-end, compatible con TLSv1.3
ssl-default-server-ciphers: para el back-end TLSv1.2 máximo. Cualquier cifrado con capacidad TLSv1.3/TLSv1.2 funcionará en modo TLSv1.2.
ssl-default-server-ciphersuites compatible con back-end TLSv1.3.
Para obtener ejemplos de configuración manual de cifrados, consulte Generador de configuración SSL.
La sección de front-end es la ubicación del extremo entrante. Aquí es donde se debe configurar el puerto de enlace y el certificado que se deben utilizar. Para obtener más información sobre las configuraciones de enlace, consulte el Manual de configuración de HAPROXY.
Por ejemplo:
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
SSL interno de HAProxy a aplicaciones
El SSL interno se configura según el servidor back-end. Cada servidor puede tener una configuración diferente. En el siguiente ejemplo, todos los servidores de la plataforma soportan SSL y reciben solicitudes en el puerto 8443. El extremo del servidor se ha configurado para que apunte a esa ubicación y utilizar SSL. En este ejemplo se utilizan certificados autofirmados, por lo que la verificación se define en none. Para obtener más información sobre las opciones de configuración del servidor, consulte el Manual de configuración de HAPROXY.
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
Ejemplo de back-end y front-end para el conector de eMessage
Si tiene HAProxy en medio de la comunicación del conector Axeda Agent y eMessage, añada las siguientes configuraciones adicionales a HAProxy:
Cree un nuevo back-end en el front-end para el conector de eMessage:
frontend ft_web
bind *:<HAProxy listening port> ssl crt /certs/haproxy.pem name sslweb

#path based routing to eMessage connector
acl emsg path_beg /eMessgae /lwPing /upload /download
use_backend emessage if emsg #conditional forwarding to the emessage backend
default_backend platform
Cree un nuevo back-end para el conector de eMessage:
backend emessage
balance roundrobin
server emessage <eMessage port> check port 9009 check ssl
verify none
Creación de un certificado autofirmado
Por ejemplo:
openssl req -newkey rsa:2048 -nodes -x509 -days 365 -keyout haproxy.key -out haproxy.crt -subj "/CN=$HAPROXY_SSL_SERVER_CERT_CN" && \
cat haproxy.crt haproxy.key >> /certs/haproxy.pem
chmod 755 /certs/haproxy.pem && \
Utilización de Docker
Se puede utilizar el contenedor y montaje oficial de HAProxy en ficheros certs y haproxy.cfg. El contenedor interno de HAProxy soporta las siguientes configuraciones:
PLATFORM_ADDRESSES: platform1,platform2,platform3
CXSERVER_ADDRESSES: cxserver1,cxserver2
HAPROXY_STAT_USER: admin
HAPROXY_STAT_PASSWORD: thingworx
SSL_ENABLED: true
SSL_CERT_PATH: /certs/haproxy.pem
LOG_LEVEL: debug
PLATFORM_SECURE: true
PLATFORM_SECURE_PORT: 8443
PLATFORM_PORT: 8080
CXSERVER_SECURE: true
CXSERVER_SECURE_PORT: 8443
CXSERVER_PORT: 8080
Los certificados deben montarse en la carpeta /certs:
haproxy:
image: artifactory.rd2.thingworx.io/twxdevops/tw-lb-haproxy:latest
container_name: haproxy
ports:
- 9100:8080
- 9143:8443
- 1936:1936
environment: *haproxy-env
volumes:
- certs:/certs
¿Fue esto útil?