Configuration de SSL/TLS pour HAProxy
Vous pouvez configurer SSL ou TLS pour HAProxy dans un environnement ThingWorx de cluster haute disponibilité :
HAProxy peut être configuré pour les protocoles SSL externes et internes. Vous devez fournir les fichiers de certificat. Vous ne pouvez pas utiliser le relais SSL, car ThingWorx doit accéder à l'objet de requête pour le routage basé sur les chemins. Il existe de nombreuses options de configuration de SSL dans HAProxy. Les éléments fournis le sont à titre de référence uniquement. Pour plus d'informations, consultez la page
https://cbonte.github.io/haproxy-dconv/2.0/configuration.html (en anglais).
|
Si SELinux bloque HAProxy, ajustez les configurations SELinux en conséquence.
|
SSL externe entre les clients et HAProxy
Dans la configuration global, vous pouvez configurer des emplacements par défaut facultatifs pour les certificats et les clés privées. Dans la configuration front-end, vous pouvez configurer les chiffrements et les niveaux TLS pris en charge. Par exemple :
global
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
En l'absence de configuration TLS supplémentaire, HAProxy choisit automatiquement une suite de chiffrement en fonction du client et des suites de chiffrement HAProxy disponibles.
Pour vérifier quelle version de TLS est prise en charge par une version spécifique de HAProxy, exécutez la commande 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.
Vous pouvez constater que HAProxy est généré avec la bibliothèque OpenSSL 1.1.1k. Par conséquent, HAProxy dispose de chiffrements compatibles TLSv1.3, ce qui signifie que si le client possède les mêmes fonctionnalités, la communication TLS sera de type TLSv1.3.
|
Il est fortement recommandé d'utiliser la version de HAProxy générée avec OpenSSL version 1.1.1 ou ultérieure. Les versions antérieures de la bibliothèque OpenSSL ne prennent pas en charge TLSv1.3.
|
Pour configurer les chiffrements manuellement, reportez-vous aux paramètres de configuration correspondants :
• ssl-default-bind-ciphers : pour le front-end, TLSv1.2 maximum. Tout chiffrement compatible TLSv1.3/TLSv1.2 fonctionnera en mode TLSv1.2.
• ssl-default-server-ciphers : pour le back-end, TLSv1.2 maximum. Tout chiffrement compatible TLSv1.3/TLSv1.2 fonctionnera en mode TLSv1.2.
Pour examiner des exemples de chiffrements configurés manuellement, consultez la page
SSL Configuration Generator (en anglais).
La section front-end correspond à l'emplacement du point de terminaison entrant. C'est ici que vous devez configurer le port et le certificat de liaison à utiliser. Pour plus d'informations sur les configurations de liaison, consultez le
HAPROXY Configuration Manual (en anglais).
Par exemple :
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
SSL interne entre HAProxy et les applications
Chaque serveur back-end dispose de son propre protocole SSL interne et peut donc avoir des paramètres différents. Dans l'exemple suivant, tous les serveurs de plateforme prennent en charge SSL et reçoivent des demandes sur le port 8443. Le point de terminaison du serveur est configuré de façon à pointer vers cet emplacement et utiliser SSL. Cet exemple utilise des certificats auto-signés afin que la valeur de l'option verify soit définie sur
none. Pour plus d'informations sur les options de configuration des serveurs, consultez le
HAPROXY Configuration Manual (en anglais).
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
Exemple de back-end et de front-end pour l'eMessage Connector
Si HAProxy se trouve au centre des communications entre l'Axeda Agent et l'eMessage Connector, ajoutez les configurations supplémentaires suivantes à HAProxy :
Créez un nouveau back-end sur le front-end pour l'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
Créez un nouveau back-end pour l'eMessage Connector :
backend emessage
balance roundrobin
server emessage <eMessage port> check port 9009 check ssl
verify none
Création d'un certificat auto-signé
Par exemple :
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 && \
Utilisation de Docker
Vous pouvez utiliser le conteneur HAProxy officiel et le monter dans les fichiers certs et haproxy.cfg. Le conteneur HAProxy interne prend en charge les configurations suivantes :
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
Les certificats doivent être montés dans le dossier /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