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.
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
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
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
https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#5.1.
Por ejemplo:
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
|
El enlace del puerto y del certificado es esencial si ThingWorx Flow se ha instalado en un entorno de alta disponibilidad de ThingWorx.
|
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 información sobre las opciones de configuración del servidor, consulte
https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#5.2.
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
Ejemplo de ThingWorx Flow
Si ThingWorx Flow se ha instalado en un entorno de alta disponibilidad de ThingWorx, añada la información de configuración de back-end de ThingWorx Flow:
backend flow
server nginx <IP_de_NGinx>:443 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 && \
Ejemplo de ThingWorx Flow
Si ThingWorx Flow se ha instalado en un entorno de alta disponibilidad de ThingWorx, realice lo siguiente:
1. Cree la carpeta certs con todos los permisos necesarios en /
2. Ejecute el siguiente comando para crear el certificado:
sudo openssl req -newkey rsa:2048 -nodes -x509 -days 365 -keyout haproxy.key -out haproxy.crt -subj “/CN=<Host_del_equilibrador_de_la_carga>” && sudo cat haproxy.crt haproxy.key >> /certs/haproxy.pem
Este comando permite crear haproxy.crt y haproxy.cfg en la carpeta /etc/haproxy y haproxy.pem en la carpeta /certs.
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
FLOW_SECURE: true
FLOW_SECURE_PORT: 443
FLOW_PORT: 80
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