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
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
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
Est-ce que cela a été utile ?