为 HAProxy 配置 SSL/TLS
使用 ThingWorx HA 群集时,可以为 HAProxy 配置 SSL 或 TLS。
可以将 HAProxy 设置为使用外部 SSL 和内部 SSL。您必须提供证书文件。不能使用 passthrough SSL,因为 ThingWorx 需要请求对象的访问权限来进行基于路径的路由。有多个选项可用于在 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 配置生成器。
前端部分是传入端点的位置。应该在此配置要使用的绑定端口和证书。有关绑定配置的详细信息,请参阅
HAPROXY 配置手册。
例如:
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
从 HAProxy 到应用程序的内部 SSL
将针对每个后端服务器配置内部 SSL。每台服务器都可以采用不同的设置。在以下示例中,所有平台服务器均支持 SSL,并在端口 8443 上接收请求。已将服务器端点配置为指向该位置并使用 SSL。此示例使用自签名证书,因此,请验证其是否已设置为
none。有关服务器配置选项的详细信息,请参阅
HAPROXY 配置手册。
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
您可以使用官方 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