Конфигурирование 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 (на английском языке).
Внешние SSL от клиентов к HAProxy
В конфигурации global можно задать дополнительные расположения по умолчанию для сертификатов и закрытых ключей. В конфигурации пользователей можно настроить шифры и поддерживаемые уровни TLS. Например:
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
Пользовательская часть представляет расположение входной конечной точки. Здесь необходимо сконфигурировать используемые порт привязки и сертификат. Дополнительные сведения о конфигурациях привязки см. в документе https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#5.1 (на английском языке).
Например:
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
* 
Привязка порта и сертификата важна, если ThingWorx Flow устанавливается в среде ThingWorx HA.
Внутренний SSL из HAProxy к приложениям
Внутренний SSL настраивается для каждого сервера. Разные серверы могут иметь различные настройки. В следующем примере все серверы платформы поддерживают SSL и получают запросы через порт 8443. Конечная точка сервера настраивается так, чтобы указывать на это расположение и использовать SSL. В этом примере используются самозаверяющие сертификаты, поэтому для проверки задано значение none. Дополнительные сведения об опциях конфигурации серверов см. в документе https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#5.2 (на английском языке).
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
Пример для ThingWorx Flow
Если вы установили ThingWorx Flow в среде ThingWorx HA, добавьте информацию о конфигурации для серверной части ThingWorx Flow:
backend flow
server nginx <NGinx_IP>:443 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 && \
Пример для ThingWorx Flow
Если установлено приложение ThingWorx Flow в среде ThingWorx HA, выполните следующие действия.
1. Создайте папку certs со всеми необходимыми разрешениями в корневой папке (/).
2. Выполните следующую команду, чтобы создать сертификат:
sudo openssl req -newkey rsa:2048 -nodes -x509 -days 365 -keyout haproxy.key -out haproxy.crt -subj “/CN=<хост_балансировщика_нагрузки>” && sudo cat haproxy.crt haproxy.key >> /certs/haproxy.pem
Эта команда создает файлы haproxy.crt и haproxy.cfg в папке /etc/haproxy и файл haproxy.pem в папке /certs.
Использование среды 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
FLOW_SECURE: true
FLOW_SECURE_PORT: 443
FLOW_PORT: 80
Сертификаты должны подключаться к папке /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
Было ли это полезно?