HAProxy 用 SSL/TLS の設定
ThingWorx HA クラスタを使用している場合、HAProxy 用に SSL または TLS を設定できます。
外部 SSL および内部 SSL 用に HAProxy を設定できます。証明書ファイルを提供する必要があります。ThingWorx はパスベースのルーティングでリクエストオブジェクトにアクセスする必要があるので、パススルー SSL は使用できません。HAProxy での SSL の設定には多数のオプションがあります。以下は参照としてのみ提供されています。詳細については、
https://cbonte.github.io/haproxy-dconv/2.0/configuration.html を参照してください。
|
SELinux が HAProxy をブロックする場合、それに応じて SELinux コンフィギュレーションを調整します。
|
クライアントから HAProxy への外部 SSL
global コンフィギュレーションでは、証明書とプライベートキーのデフォルトの場所をオプションで設定できます。フロントエンドコンフィギュレーションでは、暗号およびサポートされる TLS レベルを設定できます。以下に例を示します。
global
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
追加の TLS コンフィギュレーションがない場合、HAProxy はクライアントおよび HAProxy で使用可能な暗号スイートに基づいて暗号スイートを自動的に選択します。
特定の HAProxy バージョンでサポートされている TLS バージョンを確認するには、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 になります。
|
OpenSSL 1.1.1 以降を使用して構築されている HAProxy バージョンを使用することを強くお勧めします。以前のバージョンの OpenSSL ライブラリは TLSv1.3 をサポートしていません。
|
暗号を手動で設定するには、以下の関連するコンフィギュレーション設定を参照してください。
暗号の手動コンフィギュレーションの例については、
「SSL Configuration Generator」を参照してください。
フロントエンドセクションは受信エンドポイントの位置です。ここで、使用するバインドポートと証明書を設定する必要があります。バインドコンフィギュレーションの詳細については、
「HAPROXY Configuration Manual」を参照してください。
以下に例を示します。
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
HAProxy からアプリケーションへの内部 SSL
内部 SSL はバックエンドサーバーごとに設定されます。サーバーごとに異なる設定を行えます。以下の例では、すべてのプラットフォームサーバーが SSL をサポートし、ポート 8443 でリクエストを受信します。サーバーのエンドポイントは、その場所を指して SSL を使用するように設定されています。この例では自己署名証明書を使用するので、verify が
none に設定されています。サーバーコンフィギュレーションのオプションの詳細については、
「HAPROXY Configuration Manual」を参照してください。
backend platform
server platform1 platform1:8443 ssl verify none
server platform2 platform2:8443 ssl verify none
eMessage Connector のバックエンドとフロントエンドの例
Axeda Agent と eMessage Connector の通信の間に HAProxy がある場合、以下のコンフィギュレーションを HAProxy に追加します。
eMessage Connector のフロントエンドに新規バックエンドを作成します。
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 Connector の新規バックエンドを作成します。
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 の使用
certs および haproxy.cfg ファイル内の公式の HAProxy コンテナとマウントを使用できます。内部 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