Application Gateway를 사용할 때 상호 인증 문제를 해결하는 방법을 알아봅니다.
개요
Application Gateway에서 상호 인증의 경우 구성 후 클라이언트 인증서 유효성 검사 중에 다양한 오류가 발생할 수 있습니다. 이러한 오류의 일반적인 원인은 다음과 같습니다.
- 루트 CA 인증서 없이 인증서 또는 인증서 체인 업로드
- 여러 루트 CA 인증서를 사용하여 인증서 체인 업로드
- CA 인증서가 없는 리프 인증서만 포함하는 인증서 체인 업로드
- 발급자 DN(고유 이름) 불일치로 인한 인증서 유효성 검사 오류
- EKU(확장 키 사용) 특성이 없거나 잘못되었습니다.
이 가이드에서는 발생할 수 있는 다양한 시나리오에 대해 설명하며 각각에 대한 문제 해결 단계를 제공합니다. 또한 특정 오류 코드를 해결하고 상호 인증 시나리오에서 발생할 수 있는 원인을 설명합니다. 모든 클라이언트 인증서 인증 실패로 인해 HTTP 400(잘못된 요청) 상태 코드가 클라이언트에 반환됩니다.
시나리오 문제 해결 - 구성 문제
다음 시나리오에서는 상호 인증을 설정할 때 발생할 수 있는 일반적인 구성 문제를 해결합니다. 각 시나리오에는 문제 설명 및 권장 솔루션이 포함됩니다.
자체 서명된 인증서
문제
업로드한 클라이언트 인증서는 자체 서명된 인증서이며 이로 인해 오류 코드 ApplicationGatewayTrustedClientCertificateDoesNotContainAnyCACertificate가 발생합니다.
해결 방법
사용 중인 자체 서명된 인증서에 값이 "2.5.29.19"인 BasicConstraintsOid 확장과 TRUE로 설정된 CA 플래그가 포함되어 있는지 확인합니다. 이 확장은 인증서 주체가 인증 기관 역할을 할 수 있음을 나타냅니다.
인증서 속성을 확인하려면 다음 OpenSSL 명령을 사용할 수 있습니다.
openssl x509 -in certificate.pem -text -noout
출력에서 유효한 CA 인증서에 대해 "CA:TRUE"를 표시해야 하는 "기본 제약 조건" 섹션을 찾습니다. 자체 서명된 클라이언트 인증서를 생성하는 방법에 대한 자세한 지침은 신뢰할 수 있는 클라이언트 인증서를 참조하세요.
시나리오 문제 해결 - 연결 문제
문제 없이 상호 인증을 구성할 수 있지만 Application Gateway에 요청을 보낼 때 문제가 발생합니다. 다음 섹션에서는 몇 가지 일반적인 문제 및 해결을 해결합니다. Application Gateway의 액세스 로그에서 sslClientVerify 속성을 찾을 수 있습니다.
SslClientVerify는 NONE입니다
문제
sslClientVerify 속성은 액세스 로그에 "NONE"으로 표시되어 TLS 핸드셰이크 중에 클라이언트 인증서가 표시되지 않았음을 나타냅니다.
해결 방법
이 문제는 클라이언트가 TLS 핸드셰이크 요청에서 클라이언트 인증서를 Application Gateway로 보내지 않을 때 발생합니다. 이 문제는 다음과 같은 경우에 발생할 수 있습니다.
- 클라이언트 애플리케이션이 클라이언트 인증서를 사용하도록 구성되지 않았습니다.
- 클라이언트 인증서가 제대로 설치되지 않았거나 액세스할 수 없습니다.
- 클라이언트가 Application Gateway의 서버 인증서를 신뢰하지 않음
Application Gateway에서 클라이언트 인증이 올바르게 구성되었는지 확인하려면 다음 OpenSSL 명령을 사용합니다.
openssl s_client -connect <hostname:port> -cert <path-to-certificate> -key <client-private-key-file>
위치:
-cert클라이언트 인증서의 경로를 지정합니다(리프 인증서).-key는 클라이언트 프라이빗 키 파일의 경로를 지정합니다.-verify_return_error인증서 확인이 실패할 경우 명령이 실패하는지 확인합니다.
OpenSSL s_client 명령 사용에 대한 자세한 내용은 OpenSSL 수동 페이지를 참조하세요.
SslClientVerify가 실패했습니다.
문제
sslClientVerify 속성은 액세스 로그에 "FAILED"로 표시되어 TLS 핸드셰이크 중에 클라이언트 인증서 유효성 검사가 실패했음을 나타냅니다.
해결 방법
액세스 로그에 오류가 발생할 수 있는 여러 가지 원인이 있습니다. 다음은 오류의 일반적인 원인 목록입니다.
- 발급자 인증서를 가져올 수 없습니다 . 클라이언트 인증서의 발급자 인증서를 찾을 수 없습니다. 이 문제는 일반적으로 Application Gateway에서 신뢰할 수 있는 클라이언트 CA 인증서 체인이 완료되지 않음을 의미합니다. Application Gateway에 업로드된 신뢰할 수 있는 클라이언트 CA 인증서 체인이 완료되었는지 확인합니다.
- 로컬 발급자 인증서를 가져올 수 없습니다 . 발급자 인증서를 가져올 수 없는 것과 마찬가지로 클라이언트 인증서의 발급자 인증서를 찾을 수 없습니다. 이 문제는 일반적으로 Application Gateway에서 신뢰할 수 있는 클라이언트 CA 인증서 체인이 완료되지 않음을 의미합니다. Application Gateway에 업로드된 신뢰할 수 있는 클라이언트 CA 인증서 체인이 완료되었는지 확인합니다.
- 첫 번째 인증서를 확인할 수 없습니다. 클라이언트 인증서를 확인할 수 없습니다. 이 오류는 클라이언트가 발급자를 신뢰할 수 없는 리프 인증서만 표시할 때 특히 발생합니다. Application Gateway에 업로드된 신뢰할 수 있는 클라이언트 CA 인증서 체인이 완료되었는지 확인합니다.
- 클라이언트 인증서 발급자를 확인할 수 없습니다 . 이 오류는 VerifyClientCertIssuerDN 구성이 true로 설정된 경우에 발생합니다. 이 오류는 일반적으로 클라이언트 인증서의 발급자 DN이 고객이 업로드한 신뢰할 수 있는 클라이언트 CA 인증서 체인에서 추출된 ClientCertificateIssuerDN 과 일치하지 않는 경우에 발생합니다. Application Gateway가 ClientCertificateIssuerDN을 추출하는 방법에 대한 자세한 내용은 발급자 DN을 추출하는 Application Gateway를 확인하세요. 애플리케이션 게이트웨이에 파일당 하나의 인증서 체인을 업로드하는 것이 가장 좋습니다.
- 지원되지 않는 인증서 용도: 클라이언트 인증서가 클라이언트 인증에 대한 확장 키 사용(1.3.6.1.5.5.7.3.2)을 지정하는지 확인합니다. 클라이언트 인증을 위한 확장 키 사용 및 개체 식별자의 정의에 대한 자세한 내용은 RFC 3280 및 RFC 5280에서 확인할 수 있습니다.
Application Gateway에 업로드할 신뢰할 수 있는 전체 클라이언트 CA 인증서 체인을 추출하는 방법에 대한 자세한 내용은 신뢰할 수 있는 클라이언트 CA 인증서 체인을 추출하는 방법을 참조하세요.
오류 코드 문제 해결
상호 인증을 구성할 때 표시되는 오류 코드는 다음과 같습니다. 각 오류에는 가능한 원인 및 권장 솔루션이 포함됩니다.
오류 코드: ApplicationGatewayTrustedClientCertificateMustSpecifyData
원인
업로드된 인증서 파일에 인증서 데이터가 없거나 유효한 인증서 콘텐츠가 없는 빈 파일이 포함되어 있습니다.
해결 방법
인증서 파일에 올바른 형식(PEM)의 유효한 인증서 데이터가 포함되어 있는지 확인합니다. 텍스트 편집기를 사용하여 파일에 구분 기호 간의 인증서 콘텐츠가 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 포함되어 있음을 확인합니다.
오류 코드: ApplicationGatewayTrustedClientCertificateMustNotHavePrivateKey
원인
인증서 체인에 프라이빗 키가 있습니다. 인증서 체인에는 프라이빗 키가 없어야 합니다.
해결 방법
업로드된 인증서 체인을 다시 확인하고 체인의 일부인 프라이빗 키를 제거합니다. 프라이빗 키 없이 체인을 다시 업로드합니다.
오류 코드: ApplicationGatewayTrustedClientCertificateInvalidData
원인
이 오류에는 다음과 같은 두 가지 잠재적 원인이 있습니다.
- 구문 분석 실패: 인증서 체인이 올바른 형식이 아닙니다. Application Gateway는 제대로 구분된 개별 인증서를 사용하여 PEM 형식의 인증서 체인을 예상합니다.
- 빈 콘텐츠: 업로드된 파일에는 실제 인증서 데이터가 없는 구분 기호만 포함됩니다.
해결 방법
특정 원인에 따라 다음 솔루션 중 하나를 적용합니다.
- 형식 문제: 인증서 체인이 각 인증서와 표식으로 올바르게 구분된
-----BEGIN CERTIFICATE----------END CERTIFICATE-----PEM 형식인지 확인합니다. 각 인증서는 이러한 구분 기호 내에서 별도의 줄에 있어야 합니다. - 누락된 데이터: 인증서 파일에 빈 구분 기호뿐만 아니라 구분 기호 간의 실제 인증서 데이터가 포함되어 있는지 확인합니다.
오류 코드: 애플리케이션 게이트웨이 신뢰된 클라이언트 인증서에 CA 인증서가 포함되어 있지 않음
원인
업로드된 인증서에는 CA 인증서가 없는 리프 인증서만 포함되었습니다. CA 인증서와 리프 인증서를 포함한 인증서 체인을 업로드하는 것은 허용됩니다. 리프 인증서는 단순히 무시되지만, 인증서에는 반드시 CA가 필요합니다.
해결 방법
인증서 체인에 CA 플래그가 TRUE로 설정된 적절한 BasicConstraintsOid 확장(OID: 2.5.29.19)이 있는 CA 인증서가 하나 이상 포함되어 있는지 확인합니다. 이 확장은 인증서 주체가 인증 기관 역할을 할 수 있음을 나타냅니다.
인증서의 CA 상태를 확인하려면 다음을 사용합니다.
openssl x509 -in certificate.pem -text -noout | grep -A 2 "Basic Constraints"
출력은 유효한 CA 인증서에 대해 "CA:TRUE"를 표시해야 합니다.
오류 코드: ApplicationGatewayOnlyOneRootCAAllowedInTrustedClientCertificate
원인
인증서 체인에 여러 루트 CA 인증서가 포함되어 있거나 루트 CA 인증서가 0개 포함되어 있습니다.
해결 방법
업로드된 인증서는 정확히 하나의 루트 CA 인증서(그리고 필요에 따라 많은 중간 CA 인증서)를 포함해야 합니다.