사용자 지정 도메인 이름이 있는 Amazon API Gateway에서 상호 전송 계층 보안(TLS) 인증을 사용하고 있습니다. 인증서 체인 또는 자체 서명된 인증서 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 하나요?
간략한 설명
시작하기 전에 다음 사항을 충족하는지 확인하세요.
해결 방법
Amazon API Gateway API를 호출할 때 발생하는 특정 오류 메시지 목록을 보려면 다음과 비슷한 curl 명령을 실행하세요.
$ curl -v https://mtls.example.info/test-apigw-mtls --key self-signed.key --cert self-signed.pem:"example"
클라이언트 오류
"curl: (58) could not load PEM client certificate, OpenSSL error error:02001002:system library:fopen:No such file or directory, (no key found, wrong pass phrase, or wrong file format?"
이 오류는 PEM 파일의 이름, 위치 또는 파일 형식이 잘못되었음을 의미합니다. 예를 들어 로컬에 저장된 인증서 파일 형식은 .crt이지만 API 요청에서는 .pem 파일이 대신 사용되었습니다. 이 문제를 해결하려면 로컬 클라이언트 인증서의 형식과 이름이 올바른지 확인하세요.
"curl: (6) Could not resolve host: mtls.example.info"
클라이언트가 도메인 이름을 확인할 수 없었습니다. 도메인 이름과 구성이 올바른지 확인하세요.
"url: (58) schannel: Failed to import cert file self-signed.pem, last error is 0x80092002"
이 오류는 로컬 클라이언트 .pem 파일에 문제가 있음을 의미합니다. .pem 파일에 올바른 이름과 형식이 포함되어 있는지 확인하세요.
"curl: (58) unable to set private key file: 'self-signed.key' type PEM"
이 오류는 로컬 클라이언트 파일에 문제가 있음을 의미합니다. HTTP 요청에 제공된 프라이빗 키가 누락되지 않고 올바른지 확인하세요.
서버 오류
"Access denied.(액세스가 거부되었습니다.) Reason: self-signed certificate.(원인: 자체 서명 인증서.)"
API 요청의 자체 서명된 클라이언트 인증서가 변경되거나 손상되지 않았는지 확인합니다.
다음 항목이 정확히 일치해야 합니다.
- Amazon S3의 신뢰 저장소(bundle.crt 또는 bundle.pem)에서 자체 서명된 인증서를 서명하는 데 사용되는 프라이빗 키(private.key)의 계수입니다.
- API 요청(client.crt)에서 전달된 클라이언트 인증서의 계수입니다.
두 계수를 비교하려면 다음 OpenSSL 명령을 실행합니다.
$ openssl rsa -noout -modulus -in private.key
$ openssl x509 -noout -modulus -in bundle.crt
$ openssl x509 -noout -modulus -in client.crt
참고: 보다 쉽게 비교할 수 있도록 더 짧은 해시 값을 생성하려면 PIPE를 사용하여 출력 계수를 암호화 해시 함수로 보낼 수 있습니다. 예시: openssl sha1 .
$ openssl [operation] -noout -modulus -in [data] | openssl sha1
유효한 명령 출력 예시:
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
데이터 무결성을 확인하려면 다음 diff 명령을 실행하여 콘텐츠 수준에서 데이터가 수정되지 않았는지 확인합니다.
$ diff client.crt bundle.crt
관련 정보
Amazon API Gateway를 위한 상호 TLS 인증 소개
상호 TLS가 필요한 API Gateway 사용자 지정 도메인 이름에서 HTTP 403 Forbidden 오류를 해결하려면 어떻게 해야 하나요?