로드 밸런서에 연결하려고 할 때 클라이언트 SSL/TLS 협상 오류가 발생하는 이유는 무엇인가요?

4분 분량
0

로드 밸런서에 연결하려고 할 때 보안 소켓 계층 (SSL)/전송 계층 보안 (TLS) 협상 오류가 발생합니다. 이 오류가 발생하는 이유는 무엇인가요?

간략한 설명

클라이언트 TLS 협상 오류는 클라이언트가 시작한 TLS 연결이 로드 밸런서와의 세션을 설정할 수 없음을 의미합니다. TLS 협상 오류는 클라이언트가 로드 밸런서의 보안 정책에서 지원하지 않는 프로토콜이나 암호를 사용하여 로드 밸런서에 연결하려고 할 때 발생합니다. TLS 연결을 설정하려면 클라이언트가 다음을 지원하는지 확인합니다.

  • 하나 이상의 일치하는 암호
  • 보안 정책에 지정된 프로토콜

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 AWS CLI 버전을 사용하고 있는지 확인합니다.

로드 밸런서의 보안 정책 확인

AWS Management Console에서 다음을 수행합니다.

1.    Amazon Elastic Compute Cloud(Amazon EC2) 콘솔을 엽니다.

2.    탐색 창에서 로드 밸런싱 아래의 로드 밸런서를 선택합니다.

3.    로드 밸런서를 선택한 다음, 리스너 탭을 선택합니다.

4.    보안 정책을 확인합니다.
Application Load Balancers 및 Network Load Balancers의 경우 보안 정책 열에서 보안 정책을 찾으세요.
Classic Load Balancer의 경우 암호 열에서 변경을 선택하여 보안 정책을 확인합니다.

AWS CLI에서 다음을 수행합니다.

로드 밸런서의 보안 정책에서 지원하는 프로토콜과 암호를 확인합니다.

Classic Load Balancer는 사용자 지정 보안 정책을 지원합니다. 하지만 Application Load Balancers와 Network Load Balancers는 사용자 지정 보안 정책을 지원하지 않습니다. 기본 보안 정책을 비롯한 보안 정책에 대한 자세한 내용을 보려면 다음을 참조하세요.

(선택 사항) 로드 밸런서의 보안 정책 테스트

로드 밸런서의 보안 정책에서 지원하는 프로토콜과 암호를 테스트하려면 sslscan과 같은 오픈 소스 명령줄 도구를 사용합니다.

sslscan 명령 사용

모든 Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스 또는 로컬 시스템에서 sslscan 명령을 설치하고 실행할 수 있습니다. 테스트하려는 로드 밸런서가 소스 IP 주소의 TLS 연결을 수락하는지 확인합니다. Amazon Linux EC2 인스턴스에서 sslscan을 사용하려면 다음을 수행합니다.

1.    Extra Packages for Enterprise Linux(EPEL) 리포지토리를 활성화합니다.

2.    sudo yum install sslscan 명령을 실행합니다.

3.    다음 명령을 실행하여 로드 밸런서에서 지원되는 암호를 검색합니다. example.com을 도메인 이름으로 바꿉니다.

[ec2-user@ ~]$ sslscan --show-ciphers example.com

openssl 명령 사용

또는 openssl 명령어를 사용하여 로드 밸런서의 보안 정책을 테스트할 수도 있습니다. 모든 Amazon EC2 Linux 인스턴스 또는 로컬 시스템에서 openssl 명령을 실행할 수 있습니다.

특정 SSL/TLS 버전에 지원되는 암호를 나열하려면 openssl ciphers 명령을 사용합니다.

*$* openssl ciphers -v

예를 들어 다음 명령은 TLS 버전 TLSv1.2에서 지원하는 암호를 보여줍니다.

*$* openssl ciphers -V | grep "TLSv1.2"

s\ _client 명령을 사용하여 TLS 버전과 암호 제품군을 테스트합니다. 특정 암호 집합의 강도를 확인하려면 ciphersuites.info와 같은 웹 사이트 저장소를 사용할 수 있습니다. 예를 들어, 다음 명령은 www.example.com의 암호를 표시합니다.

openssl s_client -connect example.com:443

예를 들어 TLS_PSK_WITH_AES_128_CBC_SHA는 보안이 취약한 것으로 간주됩니다. 서버에 대해 이 제품군을 사용하는 경우 다음과 같은 오류 메시지가 나타납니다.

openssl s_client -connect example.com:443 -cipher PSK-AES128-CBC-SHA -quiet
140062732593056:error:140740B5:SSL routines:SSL23_CLIENT_HELLO:no ciphers available:s23_clnt.c:508:

ECDHE-RSA-AES128-GCM-SHA256 제품군은 보안이 강한 것으로 간주됩니다. 서버에 대해 이 제품군을 사용하는 경우 다음과 비슷한 성공 메시지가 표시됩니다.

openssl s_client -connect example.com:443 -cipher ECDHE-RSA-AES128-GCM-SHA256
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 73B49649716645B90D13E29656AEFEBF289A4956301AD9BC65D4832794E282CD
Session-ID-ctx:
Master-Key: C738D1E7160421281C4CAFEA49941895430168A4028B5D5F6CB6739B58A15235F640A5D740D368A4436CCAFD062B3338
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
Start Time: 1647375807
Timeout : 300 (sec)
Verify return code: 0 (ok)

openssl 명령을 사용하여 연결에 사용되는 TLS 프로토콜의 버전을 지정할 수도 있습니다. 다음 예제는 서버에서 TLS 1.1을 지원하는지 확인하는 테스트를 보여줍니다.

openssl s_client -connect example.com:443 -tls1_1 -quiet
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
verify return:1
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Global CA G2
verify return:1
depth=0 CN = *.peg.a2z.com
verify return:1

필요한 경우 로드 밸런서의 보안 정책을 업데이트합니다.

지원되는 프로토콜 또는 암호를 사용하고 원하는 보안 수준을 달성하도록 로드 밸런서의 보안 정책을 업데이트하려면 다음 작업을 수행합니다.


AWS 공식
AWS 공식업데이트됨 2년 전