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.
* 
Se SELinux blocca HAProxy, regolare le configurazioni di SELinux di conseguenza.
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
Senza alcuna configurazione TLS aggiuntiva, HAProxy sceglie automaticamente una suite di crittografia basata sul client e le suite di crittografia disponibili di HAProxy.
Per verificare la versione di TLS supportata da una versione specifica di HAProxy, eseguire il 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.
Si può notare che HAProxy è stato creato con la libreria OpenSSL 1.1.1k e dispone di crittografie compatibili con TLSv1.3. Pertanto, se il client ha le stesse funzionalità, la comunicazione TLS è di tipo TLSv1.3.
* 
È vivamente consigliabile utilizzare la versione di HAProxy creata con OpenSSL 1.1.1 o versioni successive. Le versioni precedenti della libreria OpenSSL non supportano TLSv1.3.
Per configurare manualmente le crittografie, fare riferimento alle impostazioni di configurazione correlate:
ssl-default-bind-ciphers - Per front-end fino a TLSv1.2. Qualsiasi crittografia compatibile con TLSv1.3/TLSv1.2 funziona in modalità TLSv1.2.
ssl-default-bind-ciphersuites - Per front-end compatibile con TLSv1.3
ssl-default-server-ciphers - Per back-end fino a TLSv1.2. Qualsiasi crittografia compatibile con TLSv1.3/TLSv1.2 funziona in modalità TLSv1.2.
ssl-default-server-ciphersuites - Per back-end compatibile con TLSv1.3.
Per esempi di configurazione manuale delle crittografie, vedere SSL Configuration Generator.
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 HAPROXY Configuration Manual.
Ad esempio:
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
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 HAPROXY Configuration Manual.
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
Esempio di back-end e front-end per eMessage Connector
Se si dispone di HAProxy nel corso della comunicazione con Axeda Agent ed eMessage Connector, aggiungere le ulteriori configurazioni seguenti a HAProxy:
Creare un nuovo back-end nel front-end per eMessage Connector:
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
Creare un nuovo back-end per eMessage Connector:
backend emessage
balance roundrobin
server emessage <eMessage port> check port 9009 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 && \
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
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?