SSL 인증서 문제 해결

문제 해결 절차는 Google 관리형 SSL 인증서를 사용하는지 자체 관리형 SSL 인증서를 사용하는지에 따라 다릅니다.

Google 관리형 인증서 문제 해결

Google 관리형 인증서에는 다음과 같은 두 가지 유형의 상태가 있습니다.

  • 관리 상태
  • 도메인 상태

관리 상태

인증서 상태를 확인하려면 다음 명령어를 실행하세요.

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --global \
    --format="get(name,managed.status)"

관리 상태의 값은 다음과 같습니다.

관리 상태 설명
PROVISIONING

Google 관리형 인증서가 생성되었으며 Google Cloud는 인증 기관과 협력하여 서명합니다.

Google 관리 인증서를 프로비저닝하는 데 DNS 및 부하 분산기 구성 변경사항이 인터넷에 전파되는 순간부터 최대 60분이 걸릴 수 있습니다. 최근에 DNS 구성을 업데이트한 경우 변경사항이 완전히 전파되는 데 상당한 시간이 걸릴 수 있습니다. 전파되는 데 최대 72시간이 걸리는 경우가 있지만 일반적으로 몇 시간 정도 걸립니다. DNS 전파에 대한 자세한 내용은 변경사항 전파를 참조하세요.

인증서가 PROVISIONING 상태로 유지되면 올바른 인증서가 대상 프록시와 연결되어 있는지 확인합니다. gcloud compute target-https-proxies describe 또는 gcloud compute target-ssl-proxies describe 명령어를 실행하여 이를 확인할 수 있습니다.

ACTIVE Google 관리형 SSL 인증서는 인증 기관에서 가져옵니다. 부하 분산기에서 사용하기까지 추가로 30분이 걸릴 수 있습니다.
PROVISIONING_FAILED 인증서가 실제로 ACTIVE 상태일 때에도 잠깐 동안 PROVISIONING_FAILED 상태로 보일 수 있습니다. 상태를 다시 확인하세요.

계속 PROVISIONING_FAILED 상태일 경우 Google 관리형 인증서가 생성되었으나 인증 기관이 서명할 수 없습니다. Google 관리형 SSL 인증서 사용의 모든 단계를 완료했는지 확인합니다.

상태가 PROVISIONING_FAILED_PERMANENTLY로 바뀔 때까지 Google Cloud에서 프로비저닝을 재시도합니다.
PROVISIONING_FAILED_PERMANENTLY Google 관리형 인증서가 생성되었지만 DNS 또는 부하 분산기 구성 문제로 인해 인증 기관에서 서명할 수 없습니다. 이 상태에서는 Google Cloud가 프로비저닝을 다시 시도하지 않습니다.

대체 Google 관리형 SSL 인증서를 만들고 대체 인증서가 부하 분산기의 대상 프록시와 연결되어 있는지 확인합니다. Google 관리형 SSL 인증서 사용의 모든 단계를 확인하거나 완료합니다. 그런 다음 프로비저닝에 영구적으로 실패한 인증서를 삭제할 수 있습니다.
RENEWAL_FAILED

부하 분산기 또는 DNS 구성의 문제로 인해 Google 관리형 인증서 갱신에 실패했습니다. 관리형 인증서의 도메인이나 하위 도메인에서 A/AAAA 레코드를 사용하여 부하 분산기의 IP 주소를 가리키지 않으면 갱신 프로세스가 실패합니다. 기존 인증서가 계속 제공되지만 곧 만료됩니다. 구성을 확인합니다.

상태가 계속 RENEWAL_FAILED인 경우 새 인증서를 프로비저닝하고 새 인증서를 사용하도록 전환한 후 이전 인증서를 삭제합니다.

인증서 갱신에 대한 자세한 내용은 Google 관리형 SSL 인증서 갱신을 참조하세요.

도메인 상태

도메인 상태를 확인하려면 다음 명령어를 실행하세요.

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --global \
    --format="get(managed.domainStatus)"

이 표에 도메인 상태의 값이 설명되어 있습니다.

도메인 상태 설명
PROVISIONING Google 관리형 인증서가 도메인에 대해 생성됩니다. Google Cloud는 인증 기관과 협력하여 인증서에 서명합니다.
ACTIVE 도메인에서 성공적으로 인증서 프로비저닝 유효성 검사를 완료했습니다. SSL 인증서가 여러 도메인에 사용되는 경우 모든 도메인이 ACTIVE 상태이고 인증서의 관리형 상태ACTIVE인 경우에만 인증서를 프로비저닝할 수 있습니다.
FAILED_NOT_VISIBLE

도메인의 인증서 프로비저닝이 완료되지 않았습니다. 다음 중 하나가 문제일 수 있습니다.

  • 도메인의 DNS 레코드가 Google Cloud 부하 분산기의 IP 주소로 확인되지 않습니다. 이 문제를 해결하려면 부하 분산기의 IP 주소를 가리키도록 DNS A 및 AAAA 레코드를 업데이트합니다.

    DNS는 부하 분산기의 IP 주소 이외의 다른 IP 주소로 리졸브되지 않아야 합니다. 예를 들어 A 레코드가 올바른 부하 분산기로 리졸브되지만 AAAA는 다른 것으로 리졸브되는 경우 도메인 상태는 FAILED_NOT_VISIBLE입니다.

  • 새로 업데이트된 DNS A 및 AAAA 레코드가 완전히 전파되는 데 상당한 시간이 걸릴 수 있습니다. 인터넷에서 전파하는 데 전 세계적으로 최대 72시간까지 걸릴 때도 있지만 일반적으로 몇 시간 정도 소요됩니다. 전파가 완료될 때까지 도메인 상태는 FAILED_NOT_VISIBLE로 계속 유지됩니다.
  • SSL 인증서가 부하 분산기의 대상 프록시에 연결되지 않았습니다. 이 문제를 해결하려면 부하 분산기 구성을 업데이트하세요.
  • 전역 전달 규칙의 프런트엔드 포트에는 SSL 프록시가 있는 외부 프록시 네트워크 부하 분산기의 포트 443이 포함되지 않습니다. 이 문제는 포트 443으로 새 전달 규칙을 추가하여 해결할 수 있습니다.
  • 인증서 관리자 인증서 맵이 대상 프록시에 연결됩니다. 연결된 인증서 맵이 우선 적용되며 직접 연결된 인증서는 무시됩니다. 이 문제는 프록시에서 인증서 맵을 분리하여 해결할 수 있습니다.
  • 관리 상태PROVISIONING이면 도메인 상태가 FAILED_NOT_VISIBLE인 경우에도 Google Cloud는 계속 프로비저닝을 다시 시도합니다.
FAILED_CAA_CHECKING 도메인의 CAA 레코드 구성 문제로 인해 인증서 프로비저닝에 실패했습니다. 올바른 절차를 따랐는지 확인합니다.
FAILED_CAA_FORBIDDEN 도메인의 CAA 레코드에서 Google Cloud가 사용해야 하는 CA를 지정하지 않아 인증서 프로비저닝에 실패했습니다. 올바른 절차를 따랐는지 확인합니다.
FAILED_RATE_LIMITED 인증 기관에서 비율 제한 인증서 서명 요청을 사용하여 인증서 프로비저닝에 실패했습니다. 새 인증서를 프로비저닝하고 새 인증서를 사용하도록 전환한 후 이전 인증서를 삭제하거나 Google Cloud 지원팀에 문의할 수 있습니다.

관리형 인증서 갱신

관리형 인증서의 도메인 또는 하위 도메인이 부하 분산기의 IP 주소를 가리키지 않으면 갱신 프로세스가 실패합니다. 갱신 실패를 방지하려면 모든 도메인과 하위 도메인이 부하 분산기의 IP 주소를 가리키는지 확인하세요.

자체 관리형 SSL 인증서 문제 해결

이 가이드에서는 자체 관리형 SSL 인증서의 구성 문제를 해결하는 방법을 설명합니다.

인증서를 파싱할 수 없음

Google Cloud에는 PEM 형식의 인증서가 필요합니다. 인증서가 PEM 형식인 경우 다음을 확인합니다.

CERTIFICATE_FILE을 인증서 파일의 경로로 바꾸고 다음 OpenSSL 명령어를 사용하여 인증서의 유효성을 검사할 수 있습니다.

openssl x509 -in CERTIFICATE_FILE -text -noout

OpenSSL에서 인증서를 파싱할 수 없는 경우:

일반 이름 또는 주체 대체 이름 누락

Google Cloud를 사용하려면 인증서에 일반 이름(CN) 또는 주체 대체 이름(SAN) 속성이 있어야 합니다. 자세한 내용은 CSR 만들기를 참조하세요.

두 속성이 모두 없는 경우 자체 관리형 인증서를 만들려고 하면 Google Cloud에 다음과 같은 오류 메시지가 나타납니다.

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 -   The SSL certificate is missing a Common Name(CN) or Subject Alternative
   Name(SAN).

비공개 키를 파싱할 수 없음

Google Cloud에는 비공개 키 기준을 충족하는 PEM 형식의 비공개 키가 필요합니다.

다음 OpenSSL 명령어를 사용하여 비공개 키의 유효성을 검사할 수 있습니다. 이때 PRIVATE_KEY_FILE을 비공개 키의 경로로 바꿉니다.

    openssl rsa -in PRIVATE_KEY_FILE -check

다음 응답은 비공개 키에 문제가 있음을 나타냅니다.

  • unable to load Private Key
  • Expecting: ANY PRIVATE KEY
  • RSA key error: n does not equal p q
  • RSA key error: d e not congruent to 1
  • RSA key error: dmp1 not congruent to d
  • RSA key error: dmq1 not congruent to d
  • RSA key error: iqmp not inverse of q

이 문제를 해결하려면 새 비공개 키와 인증서를 만들어야 합니다.

암호가 포함된 비공개 키

OpenSSL에서 암호를 묻는 메시지가 표시되면 Google Cloud에서 암호를 사용하기 전에 비공개 키에서 암호를 삭제해야 합니다. 다음 OpenSSL 명령어를 사용할 수 있습니다.

openssl rsa -in PRIVATE_KEY_FILE \
    -out REPLACEMENT_PRIVATE_KEY_FILE

자리표시자를 유효한 값으로 바꿉니다.

  • PRIVATE_KEY_FILE: 암호로 보호되는 비공개 키의 경로
  • REPLACEMENT_PRIVATE_KEY_FILE: 일반 텍스트 비공개 키의 복사본을 저장할 경로

중간 인증서 만료

중간 인증서가 서버(리프) 인증서 전에 만료되면 CA가 권장사항을 따르지 않을 수 있습니다.

중간 인증서가 만료되면 Google Cloud에서 사용되는 리프 인증서가 무효화될 수 있습니다. 다음과 같이 SSL 클라이언트에 따라 달라집니다.

  • 일부 SSL 클라이언트는 리프 인증서의 만료 시간만 확인하고 만료된 중간 인증서를 무시합니다.
  • 일부 SSL 클라이언트는 만료된 중간 인증서가 있는 체인을 유효하지 않은 것으로 취급하고 경고를 표시합니다.

이 문제를 해결하려면 다음 안내를 따르세요.

  1. CA가 새 중간 인증서로 전환될 때까지 기다립니다.
  2. 새 인증서를 요청합니다.
  3. 새 키를 사용하여 새 인증서를 다시 업로드합니다.

또한 CA에서 중간 인증서의 교차 서명을 허용할 수도 있습니다. CA에 문의하여 확인합니다.

RSA 공개 지수가 너무 큼

RSA 공개 지수가 65537보다 크면 다음 오류 메시지가 표시됩니다. RFC 4871에 지정된 대로 65537을 사용해야 합니다.

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 -   The RSA public exponent is too large.

대상 프록시에서 SSL 인증서 삭제

다음 단계에서는 대상 https 프록시에 연결된 단일 SSL 인증서를 삭제하는 방법을 보여줍니다.

  1. target-https-proxy를 임시 파일로 내보냅니다.

    gcloud compute target-https-proxies export TARGET_PROXY_NAME > /tmp/proxy
    
  2. /tmp/proxy 파일을 수정하고 다음 줄을 삭제합니다.

    sslCertificates:
    -   https://www.googleapis.com/compute/v1/projects/...
    
  3. /tmp/proxy 파일을 가져옵니다.

    gcloud compute target-https-proxies import TARGET_PROXY_NAME \
       --source=/tmp/proxy
    
  4. 선택사항: SSL 인증서를 삭제합니다.

    gcloud compute ssl-certificates delete SSL_CERT_NAME
    

다음을 바꿉니다.

  • TARGET_PROXY_NAME: 대상 https 프록시 리소스의 이름
  • SSL_CERT_NAME: SSL 인증서의 이름