자체 관리형 SSL 인증서 사용

자체 관리형 SSL 인증서는 사용자가 직접 가져와 프로비저닝하고 갱신하는 인증서입니다. 이 리소스를 사용하여 클라이언트와 부하 분산기 간의 통신을 보호할 수 있습니다.

자체 관리형 인증서는 다음 인증서 유형을 모두 조합할 수 있습니다.

  • 도메인 유효성 검사(DV)
  • 조직 유효성 검사(OV)
  • 확장 유효성 검사(EV)

이 페이지에서는 유효한 인증서를 가져온 다음 인증서를 업로드하여 Google Cloud SSL 인증서 리소스를 만드는 과정을 설명합니다.

시작하기 전에

권한

이 가이드의 작업을 수행하려면 프로젝트에서 SSL 인증서를 만들고 수정할 수 있어야 합니다. 사용자가 다음 역할 또는 권한이 있는 경우 이러한 권한이 부여됩니다.

  • 프로젝트 소유자 또는 편집자입니다.
  • 프로젝트에서 compute.loadBalancerAdmin 역할을 갖고 있거나 프로젝트에서 compute.securityAdmincompute.networkAdmin 역할을 모두 갖고 있습니다.
  • 사용 중인 부하 분산기 유형에 따라 compute.sslCertificates.* 권한과 compute.targetHttpsProxies.*compute.targetSslProxies.* 중 하나 또는 둘 모두를 포함하는 프로젝트의 커스텀 역할이 있습니다.

부하 분산기

SSL 인증서는 다음을 포함한 특정 유형의 Google Cloud 부하 분산기에 필요합니다.

1단계: 비공개 키 및 인증서 만들기

이미 비공개 키와 인증 기관(CA)의 SSL 인증서가 이미 있는 경우 이 섹션을 건너뛰고 SSL 인증서 리소스 만들기로 이동하세요.

비공개 키를 선택하거나 만들기

Google Cloud SSL 인증서에는 비공개 키와 인증서 자체가 모두 PEM 형식으로 포함됩니다. 비공개 키는 다음 기준을 충족해야 합니다.

  • PEM 형식이어야 합니다.
  • 암호로 보호될 수 없습니다. Google Cloud는 비공개 키를 고유한 암호화된 형식으로 저장합니다.
  • 암호화 알고리즘이 RSA-2048 또는 ECDSA P-256이어야 합니다.

다음 OpenSSL 명령어를 사용하여 PEM 형식의 RSA-2048 암호화로 새 비공개 키를 만들 수 있습니다.

openssl genrsa -out PRIVATE_KEY_FILE 2048

PRIVATE_KEY_FILE을 새로운 비공개 키 파일의 경로와 파일 이름으로 바꿉니다.

CSR 만들기

비공개 키를 만든 후 OpenSSL을 사용하여 PEM 형식의 인증서 서명 요청(CSR)을 생성할 수 있습니다. CSR은 다음 기준을 충족해야 합니다.

  • PEM 형식이어야 합니다.
  • 일반 이름(CN) 또는 주체 대체 이름(SAN) 속성이 있어야 합니다. 사실상 macOS 및 iOS의 현재 버전과 같은 최신 클라이언트는 CN 속성에만 의존하지 않으므로 인증서가 단일 도메인에 대한 것이더라도 인증서에 CN 속성과 SAN 속성을 모두 포함해야 합니다.
  1. OpenSSL 구성 파일을 만듭니다. 다음 예시에는 주체 대체 이름이 [sans_list]에 정의되어 있습니다.

    cat <<'EOF' >CONFIG_FILE
    [req]
    default_bits              = 2048
    req_extensions            = extension_requirements
    distinguished_name        = dn_requirements
    
    [extension_requirements]
    basicConstraints          = CA:FALSE
    keyUsage                  = nonRepudiation, digitalSignature, keyEncipherment
    subjectAltName            = @sans_list
    
    [dn_requirements]
    countryName               = Country Name (2 letter code)
    stateOrProvinceName       = State or Province Name (full name)
    localityName              = Locality Name (eg, city)
    0.organizationName        = Organization Name (eg, company)
    organizationalUnitName    = Organizational Unit Name (eg, section)
    commonName                = Common Name (e.g. server FQDN or YOUR name)
    emailAddress              = Email Address
    
    [sans_list]
    DNS.1                     = SUBJECT_ALTERNATIVE_NAME_1
    DNS.2                     = SUBJECT_ALTERNATIVE_NAME_2
    
    EOF
    
  2. 다음 OpenSSL 명령어를 실행하여 인증서 서명 요청(CSR) 파일을 만듭니다. 명령어는 대화형이며 이전 단계 CONFIG_FILE[sans_list]에서 정의한 주체 대체 이름 외의 속성에 대한 메시지가 나타납니다.

    openssl req -new -key PRIVATE_KEY_FILE \
        -out CSR_FILE \
        -config CONFIG_FILE
    

두 단계에서 모두 자리표시자를 유효한 값으로 바꿉니다.

  • CONFIG_FILE: 파일 이름을 포함한 OpenSSL 구성 파일의 경로입니다. (이 절차를 완료한 후에 파일을 삭제할 수 있습니다.)
  • SUBJECT_ALTERNATIVE_NAME_1SUBJECT_ALTERNATIVE_NAME_2: 인증서의 주체 대체 이름입니다. 인증서가 하나의 호스트만을 위한 것인 경우 일반 이름과 일치하는 단일 주체 대체 이름만을 정의해야 합니다. 세 개 이상의 주체 대체 이름이 필요한 경우 DNS(DNS.3, DNS.4 등) 다음에 오는 숫자를 증가시켜 구성 파일에 추가합니다.
  • PRIVATE_KEY_FILE: 비공개 키 파일의 경로
  • CSR_FILE: CSR의 파일 이름을 포함한 경로

CSR에 서명하기

인증 기관(CA)이 CSR에 서명할 때는 자체 비공개 키를 사용하여 인증서를 만듭니다.

공개적으로 신뢰할 수 있는 CA 사용

  • CSR에 서명하기 위해 공개적으로 신뢰할 수 있는 CA를 요청하면 해당 인증서는 공용 CA를 신뢰하는 모든 클라이언트가 신뢰하게 됩니다.
  • 서명된 인증서를 생성하려면 공용 CA에 CSR만 있으면 됩니다.

자체 CA 관리

  • 자체 CA를 관리하는 경우 이를 사용하여 CSR에 서명할 수 있습니다. CA를 사용하여 CSR에 서명하면 클라이언트가 자체 CA를 신뢰하도록 구성된 경우에도 이렇게 내부적으로 신뢰할 수 있는 인증서를 만듭니다.

자체 서명 인증서 사용

  • CSR을 생성하는 데 사용한 것과 동일한 비공개 키를 사용하여 CSR에 서명하는 경우 자체 서명 인증서를 만듭니다. 클라이언트가 인증서 유효성 검사를 건너뛰도록 구성한 경우를 제외하고 자체 서명 인증서는 클라이언트가 신뢰하지 않습니다. 예를 들어 웹브라우저 클라이언트에서는 자체 서명 인증서를 신뢰할지 묻는 메시지가 표시됩니다. 자체 서명 인증서는 테스트용으로만 사용해야 합니다.

자체 CA를 관리하는 경우 또는 테스트용 자체 서명 인증서를 만들려면 다음 OpenSSL 명령어를 사용할 수 있습니다.

openssl x509 -req \
    -signkey PRIVATE_KEY_FILE \
    -in CSR_FILE \
    -out CERTIFICATE_FILE \
    -days TERM

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

  • PRIVATE_KEY_FILE: CA의 비공개 키 경로입니다. 테스트를 위해 자체 서명 인증서를 만드는 경우 이 비공개 키는 CSR을 만드는 데 사용한 것과 동일합니다.
  • CSR_FILE: CSR 경로
  • CERTIFICATE_FILE: 만들 인증서 파일의 경로
  • TERM: 현재부터 인증서를 확인하는 클라이언트가 인증서를 유효한 것으로 간주해야 하는 기간의 일수입니다.

일반 이름에 와일드 카드 사용

자체 관리형 SSL 인증서는 일반 이름에 와일드 카드를 사용할 수 있습니다. 예를 들어 일반 이름이 *.example.com.인 인증서는 호스트 이름 www.example.comfoo.example.com과 일치하지만 a.b.example.com 또는 example.com과는 일치하지 않습니다. 부하 분산기에서 인증서를 선택할 때는 와일드 카드를 사용하는 인증서보다 와일드 카드를 사용하지 않은 인증서와 호스트 이름을 일치시키는 것을 항상 선호합니다.

f*.example.com과 같이 와일드 카드 부분이 포함된 인증서는 지원되지 않습니다.

2단계: 자체 관리형 SSL 인증서 리소스 만들기

Google Cloud SSL 인증서 리소스를 만들려면 먼저 비공개 키와 인증서가 있어야 합니다. 아직 비공개 키와 인증서를 만들지 않았거나 얻지 못한 경우 비공개 키 및 인증서 만들기를 참조하세요.

Console

부하 분산 페이지의 인증서 탭에서 전역 SSL 인증서 작업을 할 수 있습니다.

  1. Google Cloud Console의 인증서 페이지로 이동합니다.
    인증서 페이지로 이동
  2. SSL 인증서 만들기를 클릭합니다.
  3. 인증서의 이름과 설명(선택사항)을 입력합니다.
  4. 인증서 업로드를 선택합니다.
  5. 인증서를 붙여넣거나 업로드를 클릭하여 인증서 파일로 이동합니다.
    CA 인증서 체인을 인증서와 동일한 파일에 포함하도록 선택할 수 있습니다. Google Cloud에서는 인증서 체인의 유효성을 검사하지 않습니다. 유효성 검사는 사용자의 책임입니다.
  6. 비공개 키를 붙여넣거나 업로드를 클릭하여 비공개 키 파일로 이동합니다.
  7. 만들기를 클릭합니다.

gcloud

외부 HTTP(S) 부하 분산기 또는 SSL 프록시 부하 분산기에 사용할 수 있는 전역 SSL 인증서를 만들려면 gcloud compute ssl-certificates create 명령어를 --global 플래그와 함께 사용합니다.

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --certificate=CERTIFICATE_FILE \
    --private-key=PRIVATE_KEY_FILE \
    --global

내부 HTTP(S) 부하 분산기에 사용할 수 있는 리전 SSL 인증서를 만들려면 gcloud compute ssl-certificates create 명령어를 --region 플래그와 함께 사용합니다.

gcloud compute ssl-certificates create CERTIFICATE_NAME \
    --certificate=CERTIFICATE_FILE \
    --private-key=PRIVATE_KEY_FILE \
    --region=REGION

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

  • CERTIFICATE_NAME: 만들 전역 인증서 리소스의 이름
  • CERTIFICATE_FILE: PEM 형식의 인증서 파일 경로입니다. CA 인증서 체인을 인증서와 동일한 파일에 포함하도록 선택할 수 있습니다. Google Cloud에서는 인증서 체인의 유효성을 검사하지 않습니다. 유효성 검사는 사용자의 책임입니다.
  • PRIVATE_KEY_FILE: PEM 형식의 비공개 키 경로입니다. 비공개 키는 암호로 보호될 수 없습니다.
  • REGION: 리전 SSL 인증서의 리전입니다(해당하는 경우). 이 인증서 리소스가 내부 HTTP(S) 부하 분산기용인 경우 리전은 내부 HTTP(S) 부하 분산기의 리전과 같아야 합니다.

api

외부 HTTPS 및 SSL 프록시 부하 분산기의 경우 sslCertificates.insert API 메서드를 사용합니다.

내부 HTTPS 부하 분산기의 경우 regionSslCertificates.insert API 메서드를 사용합니다.

이 메서드를 사용하려면 먼저 API 요청이 파일의 콘텐츠를 전송해야 하므로 인증서와 비공개 키 파일을 읽어야 합니다. 코드 샘플은 API 참조 페이지를 참조하세요.

3단계: SSL 인증서를 대상 프록시와 연결

각 대상 HTTPS 또는 SSL 프록시에 SSL 인증서를 하나 이상 연결해야 합니다. 대상 HTTPS 또는 SSL 프록시당 최대 SSL 인증서 수를 사용하여 대상 프록시를 구성할 수 있습니다. 동일한 대상 프록시에서 여러 자체 관리형 인증서를 참조할 수 있습니다.

Console

Google Cloud Console을 사용하여 기존 부하 분산기를 수정하는 경우 SSL 인증서가 해당 대상 프록시와 자동으로 연결됩니다.

gcloud

외부 HTTP(S) 부하 분산기의 대상 HTTPS 프록시와 전역 SSL 인증서를 연결하려면 gcloud compute target-https-proxies update 명령어를 --global--global-ssl-certificates 플래그와 함께 사용합니다.

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --global \
    --ssl-certificates=CERTIFICATE_LIST \
    --global-ssl-certificates

SSL 프록시 부하 분산기의 대상 SSL 프록시에 전역 SSL 인증서를 연결하려면 gcloud compute target-ssl-proxies update 명령어를 사용합니다.

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --ssl-certificates=CERTIFICATE_LIST

내부 HTTP(S) 부하 분산기의 대상 HTTPS 프록시와 리전 SSL 인증서를 연결하려면 gcloud compute target-https-proxies update 명령어를 --region--ssl-certificates-region 플래그와 함께 사용합니다.

gcloud compute target-https-proxies update TARGET_PROXY_NAME \
    --region=REGION \
    --ssl-certificates=CERTIFICATE_LIST \
    --ssl-certificates-region=REGION

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

  • TARGET_PROXY_NAME: 부하 분산기의 대상 프록시 이름입니다.
  • CERTIFICATE_LIST: 쉼표로 구분된 Google Cloud SSL 인증서 이름의 목록입니다.
  • REGION: 리전 대상 프록시의 리전 및 리전 SSL 인증서입니다(해당하는 경우).

4단계: 부하 분산기의 IP 주소를 가리키도록 DNS A 및 AAAA 레코드 업데이트

등록기관의 사이트, DNS 호스트 또는 ISP(DNS 레코드를 관리하는 곳)에서 도메인과 모든 하위 도메인에 DNS A 레코드(IPv4용) 및 DNS AAAA 레코드(IPv6용)를 추가 또는 업데이트하여 부하 분산기의 전달 규칙과 연결된 IP 주소를 가리키도록 합니다.

Cloud DNSGoogle Domains를 사용하는 경우 도메인을 설정하고 네임서버를 업데이트합니다.

단일 인증서에 여러 도메인을 사용하는 경우 모두 부하 분산기의 IP 주소를 가리키도록 모든 도메인과 하위 도메인에 대해 DNS 레코드를 추가하거나 업데이트해야 합니다.

DNS 전파가 완료될 때까지 기다린 후 dig 명령어를 실행하여 설정을 확인할 수 있습니다. 예를 들어 도메인이 www.example.com이라고 가정해 보겠습니다. 다음 dig 명령어를 실행합니다.

dig www.example.com
; <<>> DiG 9.10.6 <<>> www.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31748
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.example.com.           IN  A

;; ANSWER SECTION:
www.example.com.        1742    IN  CNAME   www.example.com.edgekey.net.
www.example.com.edgekey.net. 21330 IN   CNAME   www.example.com.edgekey.net.globalredir.akadns.net.
www.example.com.edgekey.net.globalredir.akadns.net. 3356 IN CNAME   e6858.dsce9.akamaiedge.net.
e6858.dsce9.akamaiedge.net. 19  IN  A   203.0.113.5

;; Query time: 43 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jun 03 16:54:44 PDT 2020
;; MSG SIZE  rcvd: 193

이 예시에서 203.0.113.5는 부하 분산기의 IP 주소입니다.

5단계: OpenSSL로 테스트

인증서 및 도메인 상태가 활성화된 후 부하 분산기가 자체 관리형 SSL 인증서를 사용하기까지 최대 30분이 걸릴 수 있습니다.

테스트하려면 다음 OpenSSL 명령어를 실행하여 DOMAIN을 DNS 이름으로, IP_ADDRESS를 부하 분산기의 IP 주소로 바꿉니다.

echo | openssl s_client -showcerts -servername DOMAIN -connect IP_ADDRESS:443 -verify 99 -verify_return_error

이 명령어는 부하 분산기가 클라이언트에 제공하는 인증서를 출력합니다. 출력에는 세부정보와 함께 인증서 체인과 Verify return code: 0 (ok)가 포함됩니다.

자체 관리형 SSL 인증서 작업

다음 섹션에서는 SSL 인증서 리소스를 나열, 보기, 삭제, 교체방법을 설명합니다.

SSL 인증서 나열

Console

부하 분산 페이지의 인증서 탭에서 전역 SSL 인증서 상태를 확인할 수 있습니다.

  1. Google Cloud Console의 인증서 페이지로 이동합니다.
    인증서 페이지로 이동
  2. (선택사항) SSL 인증서 목록을 필터링합니다.

gcloud

외부 HTTP(S) 부하 분산기 또는 SSL 프록시 부하 분산기에 사용할 수 있는 전역 SSL 인증서를 나열하려면 gcloud compute ssl-certificates list 명령어를 --global 플래그와 함께 사용합니다.

gcloud compute ssl-certificates list \
   --global

내부 HTTP(S) 부하 분산기에 사용할 수 있는 리전 SSL 인증서를 나열하려면 region 필터와 함께 gcloud compute ssl-certificates list 명령어를 사용합니다.

gcloud compute ssl-certificates list \
   --filter="region:(REGION ...)"

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

  • REGION: Google Cloud 리전입니다. 여러 리전을 공백으로 구분된 목록으로 포함합니다.

SSL 인증서 설명

Console

부하 분산 페이지의 인증서 탭에서 전역 SSL 인증서에 대한 추가 세부정보를 볼 수 있습니다.

  1. Google Cloud Console의 인증서 페이지로 이동합니다.
    인증서 페이지로 이동
  2. (선택사항) SSL 인증서 목록을 필터링합니다.
  3. 자세한 내용을 보려면 인증서 이름을 클릭합니다.

gcloud

전역 SSL 인증서(외부 HTTP(S) 부하 분산기 또는 SSL 프록시 부하 분산기용)를 설명하려면 gcloud compute ssl-certificates describe 명령어를 --global 플래그와 함께 사용합니다.

gcloud  compute ssl-certificates describe CERTIFICATE_NAME \
   --global

리전 SSL 인증서(내부 HTTP(S) 부하 분산기용)를 설명하려면 gcloud compute ssl-certificates describe 명령어를 --region 플래그와 함께 사용합니다.

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
   --region=REGION

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

  • CERTIFICATE_NAME: SSL 인증서의 이름
  • REGION: Google Cloud 리전

SSL 인증서 삭제

SSL 인증서를 삭제하려면 먼저 인증서를 참조하는 각 대상 프록시를 업데이트해야 합니다. 각 대상 프록시에 대해 적절한 gcloud update 명령어를 실행하여 대상 프록시의 CERTIFICATE_LIST를 업데이트하여 삭제해야 하는 SSL 인증서가 포함되지 않도록 합니다. 각 대상 SSL 프록시 또는 대상 HTTPS 프록시는 하나 이상의 SSL 인증서를 참조해야 합니다.

대상 프록시를 업데이트한 후 SSL 인증서를 삭제할 수 있습니다.

Console

부하 분산 페이지의 인증서 탭에서 전역 SSL 인증서를 삭제할 수 있습니다.

  1. Google Cloud Console의 인증서 페이지로 이동합니다.
    인증서 페이지로 이동
  2. 삭제할 SSL 인증서를 선택합니다.
  3. 삭제를 클릭합니다.
  4. 확인하려면 삭제를 다시 클릭합니다.

gcloud

전역 SSL 인증서(외부 HTTP(S) 부하 분산기 또는 SSL 프록시 부하 분산기용)를 삭제하려면 gcloud compute ssl-certificates delete 명령어를 --global 명령어와 함께 사용합니다.

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --global

리전 SSL 인증서(내부 HTTP(S) 부하 분산기용)를 삭제하려면 gcloud compute ssl-certificates delete 명령어를 --region 명령어와 함께 사용합니다.

gcloud compute ssl-certificates delete CERTIFICATE_NAME \
    --region=REGION

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

  • CERTIFICATE_NAME: SSL 인증서의 이름
  • REGION: Google Cloud 리전

SSL 인증서 교체

SSL 인증서를 교체하거나 순환해야 하는 경우 다음 단계를 따르세요.

  1. 새 SSL 인증서 리소스를 만듭니다. 새 SSL 인증서는 프로젝트 내에 고유한 이름이 있어야 합니다.
  2. 대상 프록시를 업데이트하여 SSL 인증서 목록의 첫 번째 위치에 새 SSL 인증서를 추가하여 기본 인증서로 만듭니다. 새 인증서 뒤에 보관할 기존 SSL 인증서를 추가합니다. 더 이상 필요하지 않은 이전 SSL 인증서를 제외해야 합니다. 다운타임을 방지하려면 --ssl-certificates 플래그와 함께 단일 gcloud 명령어를 실행합니다. 예를 들면 다음과 같습니다.

    외부 HTTP(S) 부하 분산기:

    gcloud compute target-https-proxies update 명령어를 --global 플래그와 함께 사용합니다.

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
       --global \
       --ssl-certificates=new-ssl-cert,other-certificates \
       --global-ssl-certificates
    

    내부 HTTP(S) 부하 분산기:

    gcloud compute target-https-proxies update 명령어를 --region 플래그와 함께 사용합니다.

    gcloud compute target-https-proxies update TARGET_PROXY_NAME \
       --region REGION \
       --ssl-certificates=new-ssl-cert,other-certificates \
       --global-ssl-certificates
    

    SSL 프록시 부하 분산기:

    gcloud compute target-ssl-proxies update 명령어를 --backend-service 플래그와 함께 사용합니다.

    gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
       --ssl-certificates=new-ssl-cert,other-certificates
    
  3. 다음 OpenSSL 명령어를 실행하여 부하 분산기가 교체 인증서를 제공하는지 확인합니다.

    echo | openssl s_client -showcerts -connect IP_ADDRESS:443 -verify 99 -verify_return_error
    
  4. 모든 Google 프런트엔드(GFE)에서 교체 인증서를 사용할 수 있도록 15분 동안 기다립니다.

  5. (선택사항) 이전 SSL 인증서를 삭제합니다.

다음 단계