Configurazione di SSL/TLS per HAProxy
È possibile configurare SSL o TLS per HAProxy quando si utilizza il clustering a disponibilità elevata ThingWorx.
HAProxy può essere configurato per SSL esterno e SSL interno. È necessario specificare i file di certificato. Non è possibile utilizzare SSL passthrough poiché ThingWorx richiede l'accesso all'oggetto richiesta per l'instradamento basato sul percorso. Esistono molte opzioni per la configurazione di SSL in HAProxy. Quanto segue è solo per riferimento. Per ulteriori informazioni, vedere https://cbonte.github.io/haproxy-dconv/2.0/configuration.html.
SSL esterno da client a HAProxy
Nella configurazione global è possibile impostare posizioni di default facoltative per i file certs e le chiavi private. Nella configurazione front-end è possibile configurare i metodi di crittografia e i livelli TLS supportati. Ad esempio:
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 sezione front-end è la posizione dell'endpoint in entrata, in cui è necessario configurare la porta di associazione e il certificato da utilizzare. Per ulteriori informazioni sulle configurazioni di associazione, vedere https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#5.1.
Ad esempio:
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
* 
L'associazione della porta e del certificato è essenziale se ThingWorx Flow è installato in un ambiente ThingWorx a disponibilità elevata.
SSL interno da HAProxy alle applicazioni
SSL interno è configurato per ogni server back-end. Ciascun server può avere impostazioni diverse. Nell'esempio riportato di seguito, tutti i server di piattaforma supportano SSL e ricevono richieste sulla porta 8443. L'endpoint del server è configurato in modo da puntare a tale posizione e utilizzare SSL. In questo esempio vengono utilizzati certificati autofirmati, pertanto verify è impostato su none. Per ulteriori informazioni sulle opzioni di configurazione del server, vedere 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
Esempio per ThingWorx Flow
Se ThingWorx Flow è stato installato in un ambiente ThingWorx a disponibilità elevata, aggiungere le informazioni di configurazione back-end di ThingWorx Flow.
backend flow
server nginx <NGinx_IP>:443 check ssl verify none
Creazione di un certificato autofirmato
Ad esempio:
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 && \
Esempio per ThingWorx Flow
Se ThingWorx Flow è stato installato in un ambiente a disponibilità elevataThingWorx, eseguire le operazioni descritte di seguito.
1. Creare la cartella certs con tutti i permessi necessari in /
2. Per creare il certificato, eseguire il comando riportato di seguito.
sudo openssl req -newkey rsa:2048 -nodes -x509 -days 365 -keyout haproxy.key -out haproxy.crt -subj “/CN=<host_bilanciamento_carico>” && sudo cat haproxy.crt haproxy.key >> /certs/haproxy.pem
Questo comando crea i file haproxy.crt e haproxy.cfg nella cartella /etc/haproxy e haproxy.pem nella cartella /certs.
Utilizzo del Docker
È possibile utilizzare il contenitore HAProxy ufficiale ed effettuare un mount nei file certs e haproxy.cfg. Il contenitore HAProxy interno supporta le configurazioni riportate di seguito.
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
I certificati devono essere montati nella cartella /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
È stato utile?