HAproxy SSL/TLS 경고: 기본적으로 tune.ssl.default-dh-param을 1024로 설정

소개

이 튜토리얼에서는 이전 시리즈의 첫 부분에서 설명된 방법을 사용하여 HAProxy Setting tune.ssl.default-dh-param to 1024 by default 경고 메시지를 해결하고 수정하는 방법을 배우게 됩니다. 서버가 경고 메시지를 생성하는지 확인한 후 HAProxy의 ssl-dh-param-file 구성 옵션을 사용하여 사용자 정의 dhparams.pem 파일을 사용하도록 설정하여 이를 수정하는 방법을 배우게 됩니다.

HAProxy 서버가 SSL/TLS 인증서로 구성되어 있고 tune.ssl.default-dh-param 매개변수가 HAProxy의 haproxy.cfg 구성 파일에 설정되지 않은 경우 HAProxy Setting tune.ssl.default-dh-param to 1024 by default 경고 메시지를 만날 수 있습니다. 이 매개변수가 설정되지 않은 경우 TLS 핸드셰이크의 Diffie-Hellman 키 합의 부분에 대해 1024 비트의 값을 기본으로 사용하게 됩니다. 이는 보안상 취약하다고 간주됩니다.

당신의 HAProxy 서버는 이 경고를 알지 못하게 발생시킬 수 있습니다. SSL/TLS 인증서를 구성하고 HAProxy를 실행할 수 있지만, 서버는 배경에서 이 문제에 대해 경고할 수 있습니다. HAProxy 서버가 1024 비트 디피-헬만 매개 변수를 기본값으로 설정하는지 확실하지 않은 경우 SSL Labs Server Test와 같은 도구를 사용하여 확인할 수 있습니다. This server supports weak Diffie-Hellman (DH) key exchange parameters 라인이 있는 보고서를 받으면 HAProxy 서버가 영향을 받았음을 나타냅니다.

이미 HAProxy 서버가 tune.ssl.default-dh-param 설정에 대한 경고를 생성하는 것으로 판명되었고 문제 해결을 건너뛰고 싶다면, 이 튜토리얼의 끝에 있는 Resolving a Secure tune.ssl.default-dh-param Warning 섹션에서 문제를 해결하는 방법을 설명합니다.

tune.ssl.default-dh-param 경고 확인하기 systemctl 사용하기

Common HAProxy Errors를 Troubleshoot하는 방법 시리즈의 처음에서 Setting tune.ssl.default-dh-param to 1024 by default 경고 메시지를 해결할 때의 문제 해결 단계를 따라 HAProxy의 상태를 systemctl로 확인합니다.

systemctl status의 출력에는 오류를 해결하는 데 필요한 모든 진단 정보가 포함될 수 있습니다. 그러나 경고를 해결하는 동안 haproxy 서비스의 현재 상태를 확인하여 실행 중이며 이를 의존하는 서비스가 계속 작동하는지 확인하는 것이 중요합니다.

systemctl 명령을 사용하여 HAProxy의 상태를 확인할 수 있습니다. 이 명령은 모든 리눅스 배포판에서 작동합니다:

  1. sudo systemctl status haproxy.service -l --no-pager

-l 플래그를 사용하면 systemctl이 긴 줄에 대해 생략 부호()를 대신 사용하지 않고 줄 전체 내용을 출력합니다. --no-pager 플래그를 사용하면 한 번에 한 화면만 표시하는 less와 같은 도구를 활성화하지 않고 전체 로그를 화면에 출력합니다.

Setting tune.ssl.default-dh-param to 1024 by default 경고 메시지를 해결하고 있으므로 다음과 유사한 출력을 받아야 합니다:

Output
● haproxy.service - HAProxy Load Balancer Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2020-10-06 14:31:39 UTC; 2min 31s ago Process: 71406 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS) Main PID: 71407 (haproxy) . . . Oct 06 14:31:39 bb9fb4c53743 systemd[1]: Starting HAProxy Load Balancer... Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : parsing [/etc/haproxy/haproxy.cfg:69] : 'bind *:5000' : Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: unable to load default 1024 bits DH parameter for certificate '/etc/haproxy/fullchain.pem'. Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: , SSL library will use an automatically generated DH parameter. Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear. Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy main started. Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy static started. Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: Proxy app started. Oct 06 14:31:39 bb9fb4c53743 systemd[1]: Started HAProxy Load Balancer.

이 출력에서 주목해야 할 두 가지 중요한 하이라이트된 섹션이 있습니다. 첫 번째는 active (running) 라인으로, 이는 HAProxy가 사용 가능하고 실행 중임을 나타냅니다. 서버에서 Active: failed와 같은 라인이 표시되면 이전 시리즈의 HAProxy의 일반적인 오류 해결 방법 튜토리얼에서 설명한 방법을 사용하여 HAProxy를 문제 해결해야 합니다.

두 번째 강조된 줄은 systemd 저널에서 가져온 것으로 tune.ssl.default-dh-param 경고를 포함합니다. 이러한 줄들은 경고에 대한 모든 정보를 제공하며, 이 경고가 어떻게 트리거되는지, HAProxy가 취한 단계들, 그리고 이를 해결하는 방법에 대해 설명합니다.

만약 당신의 systemctl 출력에 tune.ssl.default-dh-param 경고를 포함한 줄이 있다면, 이 튜토리얼의 마지막 부분에 있는 tune.ssl.default-dh-param 경고 해결 섹션으로 건너뛰어 더 안전한 값으로 HAProxy를 구성하는 방법을 배우세요.

그렇지 않은 경우에는 systemctl 출력이 경고에 대한 구체적인 정보를 제공하지 않지만, 서버가 약한 Diffie-Hellman 매개변수를 사용하고 있다는 것을 알고 있다면, 이 튜토리얼의 다음 섹션에서 journalctl 로그를 사용하여 경고 메시지의 위치를 찾는 방법을 안내합니다.

journalctl을 사용하여 tune.ssl.default-dh-param 경고 확인

만약 당신의 systemctl 출력에 tune.ssl.default-dh-param 경고가 포함되어 있지 않지만 서버가 영향을 받았다고 알고 있다면, journalctl 명령을 사용하여 HAProxy에 대한 systemd 로그를 검사해야 합니다.

임의의 리눅스 배포판에서 다음 명령을 실행하여 haproxy 서비스에 대한 systemd 저널 로그를 검사하십시오:

  1. sudo journalctl -u haproxy.service -l --no-pager | grep tune.ssl.default-dh-param

명령의 | grep tune.ssl.default-dh-param 부분은 파이프(|)를 사용하여 journalctl의 출력을 grep 명령으로 보냅니다. 이렇게 하면 저널에서 일치하는 라인만 화면에 표시됩니다.

저널에 tune.ssl.default-dh-param 경고가 포함되어 있는 경우 다음과 같은 출력을 받게됩니다:

Output
Oct 06 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.

이 출력에는 경고가 포함되어 있으므로 HAProxy를 더 안전한 값으로 구성하는 방법을 배우기 위해 튜토리얼 끝의 안전한 tune.ssl.default-dh-param 값을 설정 섹션으로 건너뛸 수 있습니다.

journaltcl 명령을 실행한 후 출력이 표시되지 않으면 다음 섹션에서 HAProxy의 내장 구성 검사 도구를 사용하여 tune.ssl.default-dh-param 경고를 확인하는 방법을 보여줍니다.

haproxy -c 또는 로그 파일을 사용하여 tune.ssl.default-dh-param 경고 확인

HAProxy에는 구성 파일을 검사하고 유효성을 검증하는 명령이 포함되어 있습니다. 이 명령을 사용하여 HAProxy를 다시 시작하지 않고도 구문 오류나 잘못된 설정을 확인할 수 있습니다. 또한, HAProxy 서버가 파일이나 시스템 로그에 출력을 기록하도록 구성된 경우 로그 파일을 확인하여 tune.ssl.default-dh-param 경고가 있는지 확인할 수 있습니다.

HAProxy 자체를 사용하여 tune.ssl.default-dh-param 경고를 확인하려면 다음 명령을 실행하십시오. HAProxy 구성 파일이 강조된 /etc/haproxy/haproxy.cfg 경로와 다른 위치에 있는 경우 올바른 파일 경로로 대체하십시오:

  1. sudo haproxy -c -f /etc/haproxy/haproxy.cfg

SSL/TLS로 구성된 서버에 tune.ssl.default-dh-param가 설정되어 있지 않은 경우 다음과 유사한 경고 출력을 받게 됩니다:

Output
[WARNING] 279/150829 (71512) : parsing [/etc/haproxy/haproxy.cfg:69] : 'bind *:5000' : unable to load default 1024 bits DH parameter for certificate '/etc/haproxy/fullchain.pem'. , SSL library will use an automatically generated DH parameter. [WARNING] 279/150829 (71512) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear. Configuration file is valid

강조된 줄에는 tune.ssl.default-dh-param 경고가 포함되어 있습니다.

HAProxy 로그를 사용하여 경고 메시지를 확인하려면 grep 명령을 사용하여 tune.ssl.default-dh-param 문자열과 일치하는 줄을 검색할 수 있습니다. 다음 명령을 실행하여 경고를 확인하십시오:

  1. sudo grep tune.ssl.default-dh-param /var/log/haproxy.log

HAproxy를 다른 로그 위치로 구성한 경우 강조된 /var/log/haproxy.log 파일의 위치에 대체 경로를 지정하십시오.

서버에서 경고가 생성되는 경우 다음과 같은 출력을 받게 됩니다:

Output
Oct 6 14:31:39 bb9fb4c53743 haproxy[71407]: [WARNING] 279/143139 (71407) : Setting tune.ssl.default-dh-param to 1024 by default, if your workload permits it you should set it to at least 2048. Please set a value >= 1024 to make this warning disappear.

주의: 로그 파일에는 경고 메시지가 포함되어 있지 않을 수 있지만 haproxy -c 명령은 여전히 경고를 생성합니다. 이 경우에는 HAproxy 서비스가 충분히 오랫동안 실행되어 로그 파일이 회전되어 있어서 경고가 포함되어 있지 않을 수 있습니다.

haproxy -c 방법을 사용하여 메시지를 확인하는 것이 서버가 영향을 받았는지를 가장 신뢰할 수 있는 방법이므로 누락된 로그 파일 항목은 안심하고 무시할 수 있습니다.

이제 서버가 tune.ssl.default-dh-param 경고를 생성하는지 여부를 결정했으므로, 문제를 해결할 두 가지 방법을 설명하는 이 튜토리얼의 다음 단계로 진행할 수 있습니다.

tune.ssl.default-dh-param 경고 해결

HAProxy에서 tune.ssl.default-dh-param 경고를 해결하는 방법은 몇 가지 다양한 설정으로 가능합니다. 하나의 옵션은 /etc/haproxy/haproxy.cfg에서 경고 메시지에 따라 명시적으로 tune.ssl.default-dh-param 값을 1024보다 큰 값으로 설정하는 것입니다. 그러나 HAProxy 문서는 해당 접근 방식이 더 안전하다고 하여 사용자 정의 Diffie-Hellman 매개변수를 지정하는 것을 권장하므로, 대신 해당 방법을 사용할 것입니다.

먼저 openssl 유틸리티를 사용하여 dhparams.pem 파일을 생성합니다. 파일이 생성되면 해당 파일을 전역 HAProxy 구성 섹션에 추가하여 모든 frontend 블록이 설정을 상속하도록합니다.

사용자 정의 DH 매개 변수를 생성하려면 다음을 실행하십시오:

  1. sudo openssl dhparam -out /etc/haproxy/dhparams.pem 2048

다음과 같은 출력을 받게됩니다:

Output
Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ..............

명령이 완료되면 HAProxy가 사용자 정의 DH 매개 변수 파일을 사용하도록 구성하십시오. /etc/haproxy/haproxy.cfgvi 또는 기본 편집기에서 엽니다.

sudo vi /etc/haproxy/haproxy.cfg

다음과 같은 파일의 섹션을 찾으십시오:

Output
. . . # turn on stats unix socket stats socket /var/lib/haproxy/stats # utilize system-wide crypto-policies #ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM

이제 ssl-default-server-ciphers PROFILE=SYSTEM 라인 다음에 다음과 같은 라인을 추가하십시오:

ssl-dh-param-file /etc/haproxy/dhparams.pem

전체 섹션은 다음과 같이 나와야합니다. 새로 추가한 ssl-dh-param-file 라인이 강조 표시됩니다:

/etc/haproxy/haproxy.cfg
. . . # turn on stats unix socket stats socket /var/lib/haproxy/stats # utilize system-wide crypto-policies #ssl-default-bind-ciphers PROFILE=SYSTEM ssl-default-server-ciphers PROFILE=SYSTEM ssl-dh-param-file /etc/haproxy/dhparams.pem

파일 편집을 완료하면 ESC를 누르고 :wq를 입력한 다음 ENTER를 눌러 저장하고 닫으십시오.

구성을 테스트하기 위해 haproxy -c 명령을 사용하여 올바른 설정을 추가했는지 확인하고 HAProxy가 사용자 정의 dhparams.pem 파일에 액세스 할 수 있는지 확인하십시오:

  1. sudo haproxy -c -f /etc/haproxy/haproxy.cfg

다음과 같이 구성이 유효하다는 출력을 받아야합니다:

Output
Configuration file is valid

당신의 설정이 유효하면 HAProxy를 재시작하여 새 Diffie-Hellman 매개 변수 파일을 사용하도록 설정하십시오:

  1. sudo systemctl restart haproxy.service

이제 HAProxy를 2048 비트의 사용자 정의 Diffie-Hellman 매개 변수 집합으로 구성했습니다. 이를 사용할 수 있도록 모든 프론트엔드를 구성했습니다. 또한 tune.ssl.default-dh-param 경고를 억제했습니다.

결론

이 튜토리얼에서는 HAProxy의 Setting tune.ssl.default-dh-param to 1024 by default 경고 메시지를 문제 해결하는 방법을 배웠습니다. HAProxy의 구성을 조사하여 메시지를 찾는 네 가지 다른 방법을 탐구했습니다. 먼저 systemctljournalctl을 사용하여 HAProxy 서버의 상태를 검사하고 systemd 로그에서 메시지를 찾으려고했습니다. 그런 다음 내장된 haproxy -c 구성 확인을 사용하여 HAProxy 구성 파일을 검사했습니다. 마지막으로 grep 명령을 사용하여 HAProxy의 로그 파일에서 로그 항목을 확인했습니다.

서버가 Setting tune.ssl.default-dh-param to 1024 by default 경고 메시지를 생성하는 것을 확인한 후에는 사용자 지정 Diffie-Hellman 매개 변수 파일을 생성하고 ssl-dh-param-file 구성 지시문을 설정하여 HAProxy가 해당 파일을 사용하도록 구성했습니다.

이제 해당 구성이 설정되었으므로 HAProxy 서버는 보다 안전한 Diffie-Hellman 매개 변수를 사용하도록 기본 설정되며 tune.ssl.default-dh-param 경고 메시지는 더 이상 로그에 표시되지 않습니다.

Source:
https://www.digitalocean.com/community/tutorials/haproxy-ssl-tls-warning-setting-tune-ssl-default-dh-param-to-1024-by-default