외부 CA에서 하위 CA 만들기

이 페이지에서는 외부 루트 CA에 연결되는 하위 인증 기관(CA)을 만드는 방법을 설명합니다.

루트 CA와 하위 CA가 포함된 기존 공개 키 인프라(PKI) 계층 구조가 있는 경우 동일한 루트 CA를 유지하고 외부 루트 CA에 연결된 CA Service의 하위 CA를 만들 수 있습니다. 외부 루트 CA의 키 및 작업은 Google Cloud 외부에 유지됩니다. 외부 루트 CA를 통해서만 하위 CA 인증서를 Google Cloud에 발급할 수 있습니다. 외부 루트 CA를 신뢰하는 모든 워크로드에서 하위 CA를 즉시 신뢰합니다. 그런 다음 하위 CA를 사용하여 런타임 시 외부 루트 CA에 다시 문의할 필요 없이 인증서를 발급할 수 있습니다.

시작하기 전에

  • CA Service 작업 관리자(roles/privateca.caManager) 또는 CA Service 관리자(roles/privateca.admin) IAM 역할이 있어야 합니다. 자세한 내용은 IAM 정책 구성을 참조하세요.
  • 외부 루트 CA를 식별합니다.
  • 하위 CA의 이름, 제목, 유효 기간, 키 크기를 정의합니다. 자세한 내용은 CA 설정 확인을 참조하세요.

외부 CA에서 하위 CA 만들기

외부 CA에서 하위 CA를 만들려면 다음 단계를 수행해야 합니다.

  1. 하위 CA 인증서 서명 요청(CSR) 생성: 첫 번째 단계는 하위 CA의 CSR을 생성한 다음 CSR을 다운로드하는 것입니다.

  2. 외부 루트 CA에서 서명한 하위 CA 인증서 가져오기: 두 번째 단계는 서명을 위해 CSR을 외부 루트 CA에 제출하는 것입니다. CSR을 제출하고 서명된 인증서를 얻기 위한 외부 루트 CA의 해당 안내를 따라야 합니다.

  3. 서명된 하위 CA 인증서를 CA Service로 가져오기: 마지막 단계는 Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 서명된 PEM 인증서 체인을 업로드하는 것입니다.

다음 섹션에서는 외부 루트 CA에서 하위 CA를 만드는 방법을 보여줍니다.

CSR 만들기

콘솔

  1. Google Cloud 콘솔에서 보안 > Certificate Authority Service 메뉴로 이동합니다.

    Certificate Authority Service로 이동

  2. CA 관리자 탭을 클릭합니다.

  3. CA 만들기를 클릭합니다.

CA 유형 선택:

  1. 하위 CA를 클릭합니다.
  2. 유효 기간 필드에 CA 인증서에서 발급한 인증서가 유효해야 할 기간을 입력합니다.
  3. 루트 CA가 외부에 있습니다를 클릭합니다.
  4. CA 등급에서 사용할 수 있는 옵션 중 하나를 선택합니다. 자세한 내용은 작업 등급 선택을 참조하세요.
  5. 리전화의 목록에서 CA 위치를 선택합니다.
  6. 다음을 클릭합니다.
CA 주체 이름 구성
  1. 조직(O) 필드에 회사 이름을 입력합니다.
  2. 선택사항: 조직 단위(OU) 필드에 회사 부서 또는 사업부를 입력합니다.
  3. 선택사항: 국가 이름 필드에 2자리 국가 코드를 입력합니다.
  4. 선택사항: 주/도 이름 필드에 주 이름을 입력합니다.
  5. 선택사항: 지역 이름 필드에 도시 이름을 입력합니다.
  6. CA 일반 이름(CN) 필드에 CA 이름을 입력합니다.
  7. 풀 ID 필드에 CA 풀 이름을 입력합니다. CA를 만든 후에는 CA 풀을 변경할 수 없습니다.
  8. 다음을 클릭합니다.
CA 키 크기 및 알고리즘 구성
  1. 요구사항에 가장 부합하는 키 알고리즘을 선택합니다. 적절한 키 알고리즘 결정에 대한 자세한 내용은 키 알고리즘 선택을 참조하세요.
  2. 다음을 클릭합니다.
CA 아티팩트 구성

다음 단계는 선택사항입니다. 이 단계를 건너뛰면 기본 설정이 적용됩니다.

  1. Google 관리형 또는 자체 관리형 Cloud Storage 버킷 사용 여부를 선택합니다.
  2. 자체 관리형 Cloud Storage 버킷을 선택하지 않으면 CA Service는 CA와 동일한 위치에 Google 관리 버킷을 만듭니다.

  3. 해지 인증서 목록(CRL) 및 CA 인증서의 Cloud Storage 버킷 게시를 중지할지 여부를 선택합니다.
  4. CRL 및 CA 인증서의 Cloud Storage 버킷 게시는 기본적으로 사용 설정되어 있습니다. 이 설정을 중지하려면 전환 버튼을 클릭합니다.

  5. 다음을 클릭합니다.
라벨 추가

다음 단계는 선택사항입니다.

CA에 라벨을 추가하려면 다음을 수행합니다.

  1. 항목 추가를 클릭합니다.
  2. 키 1 필드에 라벨 키를 입력합니다.
  3. 값 1 필드에 라벨 값을 입력합니다.
  4. 다른 라벨을 추가하려면 항목 추가를 클릭합니다. 그런 다음 2단계와 3단계에 설명된 대로 라벨 키와 값을 추가합니다.
  5. 다음을 클릭합니다.
설정 검토

모든 설정을 신중하게 검토한 다음 만들기를 클릭하여 CA를 만듭니다.

CSR 다운로드

  1. 인증 기관 페이지에서 활성화하려는 CA를 선택합니다.
  2. 활성화를 클릭합니다.
  3. 대화상자가 열리면 CSR 다운로드를 클릭합니다.

    CA의 CSR 다운로드

gcloud

  1. 하위 CA의 CA 풀을 만들려면 다음 명령어를 실행합니다. 자세한 내용은 CA 풀 만들기를 참조하세요.

    gcloud privateca pools create SUBORDINATE_POOL_ID
    

    SUBORDINATE_POOL_ID를 CA 풀의 이름으로 바꿉니다.

  2. 생성된 CA 풀에서 하위 CA를 만들려면 다음 gcloud 명령어를 실행합니다. 또한 gcloud 명령어는 CSR을 만들고 이를 FILE_NAME 파일에 저장합니다.

    gcloud privateca subordinates create SUBORDINATE_CA_ID \
      --pool=SUBORDINATE_POOL_ID \
      --create-csr --csr-output-file=FILE_NAME \
      --key-algorithm="ec-p256-sha256" \
      --subject="CN=Example Server TLS CA, O=Example LLC"
    

    다음을 바꿉니다.

    • SUBORDINATE_CA_ID: 하위 CA의 고유 식별자입니다.
    • SUBORDINATE_POOL_ID: CA 풀 이름입니다.
    • FILE_NAME: PEM으로 인코딩된 CSR이 작성되는 파일의 이름입니다.

    --key-algorithm 플래그는 CA의 관리형 Cloud HSM 키를 만드는 데 사용할 암호화 알고리즘을 가져옵니다.

    --subject 플래그는 인증서 주체의 X.501 이름을 가져옵니다.

    gcloud privateca subordinates create 명령어에 대한 자세한 내용은 gcloud privateca subordinates create를 참조하세요.

CSR이 생성되면 다음 문이 반환됩니다.

Created Certificate Authority [projects/my-project-pki/locations/us-west1/caPools/SUBORDINATE_POOL_ID/certificateAuthorities/SUBORDINATE_CA_ID] and saved CSR to FILE_NAME.

사용 가능한 전체 설정 목록을 보려면 다음 명령어를 실행합니다.

gcloud privateca subordinates create --help

CSR을 분실한 경우 다음 명령어를 사용하여 다시 다운로드할 수 있습니다.

gcloud privateca subordinates get-csr SUBORDINATE_CA_ID \
  --pool=SUBORDINATE_POOL_ID

Terraform

  1. 해당 CA 풀에 CA 풀과 하위 CA를 만들려면 다음 구성 파일을 사용합니다.

    resource "google_privateca_ca_pool" "default" {
      name     = "test-ca-pool"
      location = "us-central1"
      tier     = "ENTERPRISE"
    }
    
    resource "google_privateca_certificate_authority" "sub-ca" {
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = "my-certificate-authority-sub"
      location = "us-central1"
      config {
        subject_config {
          subject {
            organization = "HashiCorp"
            common_name = "my-subordinate-authority"
          }
          subject_alt_name {
            dns_names = ["hashicorp.com"]
          }
        }
        x509_config {
          ca_options {
            is_ca = true
            # Force the sub CA to only issue leaf certs
            max_issuer_path_length = 0
          }
          key_usage {
            base_key_usage {
              cert_sign = true
              crl_sign = true
            }
            extended_key_usage {
            }
          }
        }
      }
      lifetime = "86400s"
      key_spec {
        algorithm = "RSA_PKCS1_4096_SHA256"
      }
      type = "SUBORDINATE"
    }
    
  2. CSR을 가져오려면 다음 구성을 추가합니다.

    data "google_privateca_certificate_authority" "sub-ca-csr" {
      location = "us-central1"
      pool = google_privateca_ca_pool.default.name
      certificate_authority_id = google_privateca_certificate_authority.sub-ca.certificate_authority_id
    }
    
    output "csr" {
      value = data.google_privateca_certificate_authority.sub-ca-csr.pem_csr
    }
    
  3. terraform apply를 실행합니다.

CSR에 서명하기

생성된 CSR 파일을 인증서 발급 책임이 있는 조직 구성원에게 전달하고 서명을 요청합니다. 구체적인 단계는 조직의 설정에 따라 다릅니다.

다음 openssl 명령어를 사용하여 간단한 루트 CA를 실험해 볼 수 있습니다.

Shell

새 루트 CA의 설정을 구성합니다.

cat > root.conf <<- EOM
[ req ]
distinguished_name = req_distinguished_name
x509_extensions    = v3_ca
prompt             = no
[ req_distinguished_name ]
commonName = Sample Root
[ v3_ca ]
subjectKeyIdentifier=hash
basicConstraints=critical, CA:true
EOM

새 루트 CA를 만듭니다.

openssl req -x509 -new -nodes -config root.conf -keyout rootCA.key \
  -days 3000 -out rootCA.crt -batch

새 하위 CA 인증서에 추가해야 하는 확장자를 구성합니다.

cat > extensions.conf <<- EOM
basicConstraints=critical,CA:TRUE,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
extendedKeyUsage=critical,serverAuth
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOM

이 루트로 하위 CA의 CSR에 서명합니다.

openssl x509 -req -in FILE_NAME -CA rootCA.crt -CAkey rootCA.key \
  -CAcreateserial -out subordinate.crt -days 1095 -sha256 -extfile extensions.conf

전체 인증서 체인을 단일 파일로 연결합니다.

cat subordinate.crt > chain.crt
cat rootCA.crt >> chain.crt

서명된 인증서 업로드

서명된 인증서를 사용하여 하위 CA를 활성화하려면 다음을 수행합니다.

콘솔

  1. Google Cloud 콘솔에서 Certificate Authority Service 페이지로 이동합니다.

    Certificate Authority Service로 이동

  2. CA 관리자 탭을 클릭합니다.

  3. 인증 기관에서 만든 하위 CA를 선택합니다.

  4. 활성화를 클릭합니다.

  5. 대화상자가 열리면 CSR 다운로드를 클릭하여 발급 CA가 서명할 수 있는 PEM 인코딩 CSR 파일을 다운로드합니다.

  6. 다음을 클릭합니다.

  7. 인증서 체인 업로드 필드에서 찾아보기를 클릭합니다.

  8. 확장자가 .crt인 서명된 인증서 파일을 업로드합니다.

  9. Activate를 클릭합니다.

gcloud

gcloud privateca subordinates activate SUBORDINATE_CA_ID \
  --pool=SUBORDINATE_POOL_ID \
  --pem-chain ./chain.crt

다음을 바꿉니다.

  • SUBORDINATE_CA_ID: 활성화하려는 하위 CA의 고유 식별자입니다.
  • SUBORDINATE_POOL_ID: 하위 CA가 포함된 CA 풀의 이름입니다.

--pem-chain 플래그는 필수사항입니다. 이 플래그는 PEM 인코딩 인증서 목록이 포함된 파일을 가져옵니다. 인증서 목록은 현재 CA 인증서로 시작하고 루트 CA 인증서로 끝납니다.

gcloud privateca subordinates activate 명령어에 대한 자세한 내용은 gcloud privateca subordinates activate를 참조하세요.

서명된 인증서가 업로드되면 다음 문이 반환됩니다.

Activated certificate authority [SUBORDINATE_CA_ID].

Terraform

  1. 서명된 CA 인증서를 subordinate.crt로 로컬에 저장합니다.
  2. 서명자 CA 인증서를 rootCA.crt로 로컬에 저장합니다.
  3. CA 활성화 후 허용되지 않는 CSR을 가져오려고 하므로 첫 번째 단계에서 언급된 CSR을 가져오는 구성을 삭제합니다.
  4. 다음 필드로 하위 CA 구성을 업데이트하고 terraform apply를 실행합니다.

      pem_ca_certificate     = file("subordinate.crt")
      subordinate_config {
        pem_issuer_chain {
            pem_certificates = [file("rootCA.crt")]
        }
      }
    

    발급기관 체인에 CA가 2개 이상 포함된 경우 값을 [file("intermediateCA.cert"), file("rootCA.crt")]로 지정합니다.

다음 단계