Конфигурирование 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
Внутренний 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
Создание самозаверяющего сертификата
Например:
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