설치 및 업그레이드 > ThingWorx 설치 > 보안 구성 > TLS 구성 > HAProxy에 대한 SSL/TLS 구성
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-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
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 컨테이너를 사용하고 certshaproxy.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
도움이 되셨나요?