백엔드 통합과 함께 SSL 인증서를 사용할 때 발생하는 API Gateway 오류를 해결하려면 어떻게 해야 합니까?
Amazon API Gateway에서 백엔드 통합과 함께 SSL 인증서를 사용하려고 하는 데 오류가 발생합니다.
간략한 설명
API Gateway가 백엔드에서 SSL 핸드셰이크를 수행하면 API Gateway는 백엔드가 신뢰할 수 있는 발급자의 인증서를 제공할 것으로 예상합니다. API Gateway에서는 인증서가 유효하고 만료되지 않은 것으로 예상합니다. 또한 API Gateway는 신뢰 체인이 손상되지 않을 것으로 예상합니다. 즉, API Gateway는 인증서에 루트 인증 기관(CA), 중간 CA 및 상위 인증서 세부 정보가 포함될 것으로 예상합니다. 이 정보를 사용하여 API Gateway는 인증서 체인을 통과할 때 인증서 검증을 완료할 수 있습니다.
해결 방법
HTTP 프록시 통합 테스트
HTTP 프록시 통합에 익숙해지려면 API Gateway 콘솔에서 잘못된 SSL 인증서를 테스트하십시오. 잘못된 SSL 인증서 및 테스트에 대한 자세한 내용은 잘못된 SSL 웹사이트를 참조하십시오.
-
GET 메서드를 사용하여 /selfsigned라는 이름의 리소스를 생성합니다. 그런 다음, URL https://self-signed.badssl.com/을 사용하여 HTTP 프록시 통합을 구성합니다.
API Gateway 콘솔에서 API를 테스트합니다. 다음과 같은 오류가 표시됩니다.
"Thu Dec 15 16:05:05 UTC 2022 : Sending request to https://self-signed.badssl.com/
Thu Dec 15 16:05:05 UTC 2022 : Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" -
GET 메서드를 사용하여 /expiredcert라는 이름의 리소스를 생성합니다. 그런 다음, URL https://expired.badssl.com/을 사용하여 HTTP 프록시 통합을 구성합니다.
API Gateway 콘솔에서 API를 테스트합니다. 다음과 같은 오류가 표시됩니다.
"Thu Dec 15 16:06:02 UTC 2022 : Sending request to https://expired.badssl.com/
Thu Dec 15 16:06:02 UTC 2022 : Execution failed due to configuration error: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed" -
GET 메서드를 사용하여 /untrustedRootCA라는 이름의 리소스를 생성합니다. URL https://untrusted-root.badssl.com/을 사용하여 HTTP 프록시 통합을 구성합니다.
API Gateway 콘솔에서 API를 테스트합니다. 다음과 같은 오류가 표시됩니다.
"Thu Dec 15 16:06:28 UTC 2022 : Sending request to https://untrusted-root.badssl.com/
Thu Dec 15 16:06:28 UTC 2022 : Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
“PKIX path building failed” 오류 해결
API Gateway는 VPC 링크 통합을 통해 TLS 종료를 수행하는 다음 홉에서 인증서 검증을 수행합니다. Network Load Balancer에 TLS 리스너가 있는 경우 Network Load Balancer는 TLS 종료를 수행하고 대상에 대한 또 다른 연결을 생성합니다. Network Load Balancer에 연결된 인증서는 모든 요구 사항을 충족해야 합니다. Network Load Balancer는 대상과의 SSL 핸드셰이크 중에 인증서 검증을 수행하지 않습니다.
Network Load Balancer가 대상 인스턴스에 설치된 만료되거나 자체 서명된 인증서를 허용합니다. Network Load Balancer와 대상 그룹은 VPC 내에 바인딩되며 안전하게 통신합니다. Network Load Balancer가 TCP 리스너를 사용하는 경우 TLS 핸드셰이크는 엔드 투 엔드 방식으로 수행됩니다. 이런 경우 백엔드 애플리케이션은 SSL 요구 사항을 준수해야 합니다.
API Gateway는 VPC 링크 통합을 통한 SSL 핸드셰이크 중에 서버 이름 표시(SNI)를 지원합니다.
API Gateway에서 백엔드 Network Load Balancer 인증서의 인증 기관(CA)을 검증할 수 없는 경우 다음 오류가 발생합니다.
"Execution failed due to configuration error: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target"
PKIX path building failed 오류가 발생하는 경우 다음과 같은 인증서 문제 중 하나가 원인일 수 있습니다.
- 불완전한 인증서 체인: SSL 인증서에 예상 중간 인증서가 포함되어 있지 않거나 전체 인증서 체인이 없는 경우 인증서 검증이 실패합니다.
- 지원되지 않는 CA: API Gateway가 지원하는 CA에서 인증서를 발급하지 않은 경우 검증이 실패합니다. CA에서 발급하지 않은 자체 서명된 인증서 또는 프라이빗 인증서인 경우에도 마찬가지입니다.
이 오류를 해결하려면 다음 단계를 수행하십시오.
"insecureSkipVerification" 켜기
참고: 프로덕션 사용 사례에서는 이 메서드를 사용하지 않는 것이 좋습니다.
오류가 발생하는 특정 통합에 대해 insecureSkipVerification 옵션을 true로 설정합니다. HTTP 및 HTTP_PROXY 통합에서만 이 설정을 지원한다는 점에 유의하십시오. 이 옵션을 true로 설정하면 API Gateway는 통합 엔드포인트의 인증서에 대한 CA 검증을 건너뜁니다. 또한 자체 서명된 인증서 또는프라이빗 CA의 인증서를 사용할 수 있습니다.
참고: EXAMPLE-REST-API-ID 및 EXAMPLE-RESOURCE-ID를 원하는 값으로 바꾸십시오.
aws apigateway update-integration --rest-api-id EXAMPLE-REST-API-ID --resource-id EXAMPLE-RESOURCE-ID --http-method GET --patch-operations "op='replace',path='/tlsConfig/insecureSkipVerification',value=true"
insecureSkipVerification을 켜도 API Gateway는 여전히 기본 인증서 검증을 수행합니다. 이 검증에는 인증서 만료일, 호스트 이름 및 루트 CA의 존재 여부에 대한 확인이 포함됩니다.
인증서 체인이 완전한지 확인
인증서 경로 체인이 완전한지 확인하려면 다음 OpenSSL 명령을 실행합니다.
참고: 이 명령을 실행하려면 OpenSSL을 설치해야 합니다. 자세한 내용은 OpenSSL 웹사이트를 참조하십시오.
$ openssl s_client -servername example.com -connect example.com:443
자세한 내용은 OpenSSL 웹사이트의 s_client를 참조하십시오.
인증서 체인이 완전하면 명령이 verify ok를 반환합니다. 그렇지 않으면 출력은 모든 유형의 인증서(지원되는 CA 또는 지원되지 않는 CA)에 대한 인증서 체인이 불완전함을 나타냅니다.
참고: 또한 Network Load Balancer가 있는 API Gateway의 통합 URI가 유효한 최상위 도메인(TLD)을 사용하는지 확인하십시오. API Gateway 콘솔은 특정 도메인 확장자로 끝나는 엔드포인트 URL을 허용하지 않을 수 있습니다.
관련 정보
관련 콘텐츠
- 질문됨 2년 전lg...
- 질문됨 2달 전lg...
- 질문됨 6달 전lg...
- AWS 공식업데이트됨 2년 전