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).
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 frontend, 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
# 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 section frontend 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 la page
https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#5.1 (en anglais).
Par exemple :
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
|
La liaison du port et du certificat est essentielle si vous avez installé ThingWorx Flow dans un environnement ThingWorx haute disponibilité.
|
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 du serveur, consultez la page
https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#5.2 (en anglais).
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
Exemple pour ThingWorx Flow
Si vous avez installé ThingWorx Flow dans un environnement ThingWorx haute disponibilité, ajoutez les informations de configuration de ThingWorx Flow back-end :
backend flow
server nginx <NGinx_IP>:443 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 && \
Exemple pour ThingWorx Flow
Si vous avez installé ThingWorx Flow dans un environnement ThingWorx haute disponibilité, procédez comme suit :
1. Créez le dossier certs sous / avec toutes les autorisations requises.
2. Exécutez la commande suivante pour créer le certificat :
sudo openssl req -newkey rsa:2048 -nodes -x509 -days 365 -keyout haproxy.key -out haproxy.crt -subj “/CN=<Hôte_Equilibreur_de_charge>” && sudo cat haproxy.crt haproxy.key >> /certs/haproxy.pem
Cette commande crée les fichiers haproxy.crt et haproxy.cfg dans le dossier /etc/haproxy et le fichier haproxy.pem dans le dossier /certs.
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
FLOW_SECURE: true
FLOW_SECURE_PORT: 443
FLOW_PORT: 80
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