Конфигурирование SSL/TLS для HAProxy
При использовании HA-кластеризации ThingWorx можно сконфигурировать SSL или TLS для HAProxy.
HAProxy можно настроить для внешнего SSL и внутреннего SSL. Необходимо предоставить файлы сертификатов. Невозможно использовать сквозной режим SSL, так как для ThingWorx требуется доступ к объекту запроса для маршрутизации с указанным путем. Существует множество опций конфигурирования SSL в HAProxy. Следующий пример предназначен только для справки; дополнительные сведения см. в документе https://cbonte.github.io/haproxy-dconv/2.0/configuration.html (на английском языке).
* 
Если SELinux блокирует HAProxy, скорректируйте конфигурации SELinux соответствующим образом.
Внешние SSL от клиентов к HAProxy
В конфигурации global можно задать дополнительные расположения по умолчанию для сертификатов и закрытых ключей. В конфигурации пользователей можно настроить шифры и поддерживаемые уровни TLS. Например:
global
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
Без дополнительной конфигурации TLS HAProxy автоматически выбирает набор шифров на основе доступных наборов шифров HAProxy и клиента.
Чтобы проверить, какая версия TLS поддерживается конкретной версией HAProxy, выполните 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.
Можно увидеть, что HAProxy компонуется с помощью библиотеки OpenSSL 1.1.1k. Поэтому HAProxy имеет шифры с поддержкой TLSv1.3. Это означает, что если у клиента есть те же возможности, соединение с TLS будет иметь тип TLSv1.3.
* 
Настоятельно рекомендуется использовать версию HAProxy, построенную с версией OpenSSL 1.1.1 или более поздней. Более ранние версии библиотеки OpenSSL не поддерживают TLSv1.3.
Сведения о конфигурировании шифров вручную см. в соответствующих настройках конфигурации:
ssl-default-bind-ciphers - для интерфейсной части TLSv1.2, не старше. Любой шифр с поддержкой TLSv1.3/TLSv1.2 будет работать в режиме TLSv1.2.
ssl-default-bind-ciphersuites - для интерфейсной части с поддержкой TLSv1.3.
ssl-default-server-ciphers - для серверной части TLSv1.2, не старше. Любой шифр с поддержкой TLSv1.3/TLSv1.2 будет работать в режиме TLSv1.2.
ssl-default-server-ciphersuites для серверной части с поддержкой TLSv1.3.
Примеры конфигурирования шифров вручную см. в разделе Генератор конфигурации SSL.
Пользовательская часть представляет расположение входной конечной точки. Здесь необходимо сконфигурировать используемые порт привязки и сертификат. Дополнительные сведения о конфигурациях привязки см. в документе Руководство по конфигурации HAPROXY.
Например:
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
Внутренний SSL из HAProxy к приложениям
Внутренний SSL настраивается для каждого сервера. Разные серверы могут иметь различные настройки. В следующем примере все серверы платформы поддерживают SSL и получают запросы через порт 8443. Конечная точка сервера настраивается так, чтобы указывать на это расположение и использовать SSL. В этом примере используются самозаверяющие сертификаты, поэтому для проверки задано значение none. Дополнительные сведения об опциях конфигурации сервера см. в документе Руководство по конфигурации HAPROXY.
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
Пример серверной и интерфейсной частей для соединителя eMessage
При наличии HAProxy в середине соединения Axeda CAGE и соединителя eMessage добавьте в HAProxy следующие дополнительные конфигурации:
Создайте новый внутренний сервер в интерфейсе для соединителя eMessage:
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
Создайте новый внутренний сервер для соединителя eMessage:
backend emessage
balance roundrobin
server emessage <eMessage port> check port 9009 check ssl
verify none
Создание самозаверяющего сертификата
Например:
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 && \
Использование среды Docker
Можно использовать официальный контейнер HAProxy и подключения в файлах certs и haproxy.cfg. Внутренний контейнер HAProxy поддерживает следующие конфигурации:
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
Сертификаты должны подключаться к папке /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
Было ли это полезно?