Public CA 및 ACME 클라이언트를 사용하여 인증서 요청

이 튜토리얼에서는 Google Cloud CLI를 사용하여 Public Certificate Authority로 TLS 인증서를 요청하는 절차를 안내합니다. Public Certificate Authority에서 사용하는 루트 및 중개 CA에 대해서는 Google Trust Services를 참조하세요. Public CA에서 인증서를 요청하는 경우 요금이 부과되지 않습니다.

시작하기 전에

  • Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

    gcloud init

  • Google Cloud 프로젝트를 만들거나 선택합니다.

    • Google Cloud 프로젝트를 만듭니다.

      gcloud projects create PROJECT_ID

      PROJECT_ID를 만들려는 Google Cloud 프로젝트의 이름으로 바꿉니다.

    • 만든 Google Cloud 프로젝트를 선택합니다.

      gcloud config set project PROJECT_ID

      PROJECT_ID를 Google Cloud 프로젝트 이름으로 바꿉니다.

  • 소유자(roles/owner) 또는 Public CA 외부 계정 키 생성자(publicca.externalAccountKeyCreator) IAM 역할이 있는지 확인합니다.

    Public CA 외부 계정 키 생성자(publicca.externalAccountKeyCreator) IAM 역할을 부여하려면 다음 명령어를 실행합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=user:USER \
      --role=roles/publicca.externalAccountKeyCreator
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • USER: IAM 역할을 할당하려는 사용자의 고유 식별자

    IAM 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

  • Public CA API를 사용 설정합니다.

    gcloud services enable publicca.googleapis.com

클라이언트 설치

Public CA를 사용하려면 ACME 클라이언트를 설치해야 합니다. 다음 안내에서는 Certbot을 ACME 클라이언트로 사용합니다. 클라이언트가 외부 계정 바인딩(EAB)을 지원하는 경우 다른 ACME 클라이언트를 사용할 수 있습니다.

Certbot을 설치하려면 Certbot 안내를 참조하세요.

클라이언트가 Public CA 서버를 가리키도록 해야 합니다. ACME 클라이언트가 Public CA와 처음 상호작용할 때 클라이언트는 새 키 쌍을 생성하고 공개 키를 Public CA로 보냅니다.

EAB 키 ID 및 HMAC 요청

ACME 클라이언트를 설치한 후 ACME 계정을 Public CA에 등록하여 Public CA에서 인증서를 요청해야 합니다. EAB 보안 비밀을 사용하면 Public CA에 ACME 계정을 등록할 수 있습니다. EAB 보안 비밀은 키 ID와 해시 기반 메시지 인증 코드(HMAC)로 구성됩니다.

Public CA API 또는 Google Cloud CLI를 사용하여 EAB 보안 비밀을 요청할 수 있습니다.

EAB 키 ID 및 HMAC를 요청하려면 다음 명령어를 실행합니다.

gcloud publicca external-account-keys create

이 명령어는 Public CA의 프로덕션 환경에서 유효한 EAB 보안 비밀을 반환합니다. 응답 본문의 keyId 필드에는 EAB 키 ID가 포함되고 b64MacKey 필드에는 EAB HMAC가 포함됩니다.

EAB 보안 비밀은 획득 후 7일 이내에 사용해야 합니다. EAB 보안 비밀을 7일 이내에 사용하지 않으면 무효화됩니다. EAB 보안 비밀을 사용하여 등록된 ACME 계정은 만료되지 않습니다.

ACME 계정 등록

이 섹션에서는 방금 가져온 EAB 보안 비밀을 제공하여 Public CA에 ACME 계정을 등록하는 방법을 설명합니다.

일반 ACME 클라이언트를 사용하여 ACME 계정을 등록하고 등록하는 동안 EAB 키 ID와 HMAC를 제공합니다.

Public CA에 ACME 계정을 등록하고 EAB 보안 비밀을 요청하는 데 사용한 Google Cloud 프로젝트에 ACME 계정을 바인딩하려면 다음 명령어를 실행합니다.

certbot register \
    --email "EMAIL_ADDRESS" \
    --no-eff-email \
    --server "SERVER" \
    --eab-kid "EAB_KID" \
    --eab-hmac-key "EAB_HMAC_KEY"

다음을 바꿉니다.

  • EMAIL_ADDRESS: 이메일 주소
  • SERVER: 프로덕션 또는 스테이징 환경의 ACME 디렉터리 URL
  • EAB_KID: EAB 키 ID
  • EAB_HMAC_KEY: EAB HMAC 키

다음 표에서는 프로덕션 및 스테이징 환경에 대한 설명과 ACME 디렉터리 URL을 제공합니다.

환경 설명 ACME 디렉터리 URL
프로덕션 프로덕션 환경에서는 공개적으로 신뢰할 수 있는 인증서를 가져올 수 있습니다. https://dv.acme-v02.api.pki.goog/directory
스테이징 스테이징 환경은 공개적으로 신뢰할 수 없는 인증서를 반환합니다. 스테이징 환경은 프로덕션 환경과 동일한 검증 검사를 수행합니다. 통합 또는 다른 종류의 테스트에 스테이징 환경을 사용할 수 있습니다. https://dv.acme-v02.test-api.pki.goog/directory

EAB 보안 비밀로 ACME 계정을 하나만 등록할 수 있습니다. EAB 보안 비밀을 사용하여 ACME 계정을 등록하면 EAB 보안 비밀이 무효화되고 재사용할 수 없습니다. 여러 ACME 계정을 등록하려면 각 계정에 고유한 EAB 보안 비밀을 요청해야 합니다.

인증서 요청

Public CA는 인증서 대상의 제어를 검사하고 ACME 클라이언트가 인증서 관리 작업을 예상대로 수행하는 지 확인한 후 일반 ACME 워크플로를 사용하여 인증서를 요청, 갱신, 취소할 수 있습니다. ACME 클라이언트를 사용하여 이러한 작업을 수행할 수 있습니다. 인증서를 요청 및 갱신하려면 수동 DNS 챌린지와 같은 ACME 챌린지를 완료해야 합니다.

수동 DNS 챌린지를 사용하여 인증서를 요청하려면 다음 명령어를 실행합니다.

certbot certonly \
    --manual \
    --preferred-challenges "dns-01" \
    --server "SERVER" \
    --domains "DOMAINS"

다음을 바꿉니다.

  • SERVER: 프로덕션 또는 스테이징 환경의 ACME 디렉터리 URL
  • DOMAINS: 인증서를 요청하는 도메인의 쉼표로 구분된 목록

삭제

도메인에 대한 인증서가 더 이상 필요하지 않으면 만든 프로젝트를 삭제하세요.

스테이징

Public CA의 스테이징 환경을 사용하여 테스트 목적으로 인증서를 요청할 수 있습니다. 스테이징 환경에서 발급된 인증서는 테스트 루트 CA에 연결됩니다. 스테이징 환경의 인증서는 스테이징 루트 인증서를 신뢰하도록 구성되지 않은 브라우저 또는 다른 클라이언트에서 신뢰하지 않습니다. 스테이징 환경에서 유효한 EAB 보안 비밀을 가져오려면 스테이징 환경에 엔드포인트를 사용하도록 API 엔드포인트를 재정의합니다.

gcloud config set api_endpoint_overrides/publicca https://preprod-publicca.googleapis.com/
그런 다음 계정 키 생성 명령어를 실행하여 스테이징 키를 만듭니다.
gcloud publicca external-account-keys create
프로덕션 환경의 엔드포인트로 되돌리려면 다음 명령어를 실행합니다.
gcloud config unset api_endpoint_overrides/publicca

Google Cloud 프로젝트를 삭제합니다.

gcloud projects delete PROJECT_ID

다음 단계