外部 CA から下位 CA を作成する
このページでは、外部ルート CA にチェーン接続する下位認証局(CA)を作成する方法について説明します。
ルート CA と下位 CA を含む既存の公開鍵基盤(PKI)階層がある場合、同じルート CA を維持し、外部ルート CA に連結する下位 CA を CA Service に作成できます。外部ルート CA の鍵とオペレーションは Google Cloudの外部に残ります。外部ルート CA を使用して、Google Cloudに下位 CA 証明書を発行できます。下位 CA は、外部ルート CA を信頼するすべてのワークロードによってすぐに信頼されます。その後、下位 CA を使用して、実行時に外部ルート CA にアクセスしなくても証明書を発行できます。
準備
- CA Service オペレーション マネージャー(
roles/privateca.caManager
)または CA Service 管理者(roles/privateca.admin
)の IAM ロールがあることを確認します。詳細については、IAM ポリシーを構成するをご覧ください。 - 外部ルート CA を特定します。
- 下位 CA の名前、サブジェクト、有効期間、鍵のサイズを定義します。詳細については、CA 設定を決定するをご覧ください。
外部 CA から下位 CA を作成する
外部 CA から下位 CA を作成する手順は次のとおりです。
下位 CA 証明書署名リクエスト(CSR)を生成する: 最初のステップでは、下位 CA の CSR を生成し、CSR をダウンロードします。
外部ルート CA によって署名された下位 CA 証明書を取得する: 次に、CSR を外部ルート CA に送信して署名します。CSR の送信と署名付き証明書の取得については、外部ルート CA の具体的な手順に従ってください。
署名済みの下位 CA 証明書を CA Service にインポートする: 最後のステップでは、Google Cloud CLI または Google Cloud コンソールを使用して、署名済みの PEM 証明書チェーンをアップロードします。
次のセクションでは、外部ルート CA から下位 CA を作成する方法について説明します。
CSR を作成する
Console
Google Cloud コンソールで [セキュリティ] > [Certificate Authority Service] メニューに移動します。
[CA マネージャー] タブをクリックします。
[CA を作成] をクリックします。
CA タイプを選択:
- [下位 CA] をクリックします。
- [有効期間] フィールドに、CA 証明書が発行した証明書を有効にする期間を入力します。
- [Root CA is external] をクリックします。
- CA の [ティア] に、使用可能なオプションのいずれかを選択します。詳細については、オペレーション ティアを選択するをご覧ください。
- [リージョン指定] で、リストから CA のロケーションを選択します。
- [次へ] をクリックします。
- [組織(O)] フィールドに、組織の名前を入力します。
- 省略可: [組織部門(OU)] フィールドに、会社の部門またはビジネス ユニットを入力します。
- 省略可: [国名] フィールドに、2 文字の国コードを入力します。
- 省略可: [州または省名] フィールドに、州名を入力します。
- 省略可: [地域名] フィールドに、都市の名前を入力します。
- [CA 共通名(CN)] フィールドに、CA 名を入力します。
- [プール ID] フィールドに、CA プールの名前を入力します。CA の作成後に CA プールを変更することはできません。
- [次へ] をクリックします。
- 自社のニーズに最適な鍵アルゴリズムを選択します。適切な鍵アルゴリズムを決定する方法については、鍵アルゴリズムを選択するをご覧ください。
- [次へ] をクリックします。
次の手順は省略可能です。 この手順をスキップすると、デフォルト設定が適用されます。
- Google 管理またはセルフマネージドの Cloud Storage バケットのどちらを使用するかを選択します。
- Cloud Storage バケットへの証明書失効リスト(CRL)と CA 証明書の公開を無効にするかどうかを選択します。
- [次へ] をクリックします。
セルフマネージド Cloud Storage バケットを選択しない場合、CA Service は CA と同じロケーションに Google 管理バケットを作成します。
Cloud Storage バケットでの CRL および CA 証明書の公開は、デフォルトで有効になっています。これらの設定を無効にするには、切り替えボタンをクリックします。
次の手順は省略可能です。
CA にラベルを追加する場合は、次の手順を行います。
- [項目を追加] をクリックします。
- [キー 1] フィールドにラベルキーを入力します。
- [値 1] フィールドにラベルの値を入力します。
- 別のラベルを追加する場合は、 項目を追加をクリックします。次に、手順 2 と 3 で説明したように、ラベルキーと値を追加します。
- [次へ] をクリックします。
すべての設定をよく確認し、[作成] をクリックして CA を作成します。
CSR をダウンロードする
- [認証局] ページで、有効にする CA を選択します。
- [有効にする] をクリックします。
表示されたダイアログで
[CSR をダウンロード] をクリックします。
gcloud
下位 CA の CA プールを作成するには、次のコマンドを実行します。詳細については、CA プールを作成するをご覧ください。
gcloud privateca pools create SUBORDINATE_POOL_ID --location=LOCATION
以下を置き換えます。
- SUBORDINATE_POOL_ID: CA プールの名前。
- LOCATION: CA プールのロケーション。
作成した CA プールに下位 CA を作成するには、次の
gcloud
コマンドを実行します。gcloud
コマンドは CSR を作成して FILE_NAME ファイルに保存します。gcloud privateca subordinates create SUBORDINATE_CA_ID \ --pool=SUBORDINATE_POOL_ID \ --location=LOCATION \ --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 プールの名前。
- LOCATION: 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 を紛失した場合は、次のコマンドを使用して CSR を再度ダウンロードできます。
gcloud privateca subordinates get-csr SUBORDINATE_CA_ID \
--pool=SUBORDINATE_POOL_ID \
--location=LOCATION
Terraform
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" }
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 }
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
証明書チェーン全体を 1 つのファイルに連結します。
cat subordinate.crt > chain.crt
cat rootCA.crt >> chain.crt
署名済みの証明書をアップロードする
署名付き証明書を使用して下位 CA を有効にする手順は次のとおりです。
Console
Google Cloud コンソールの [Certificate Authority Service] ページに移動します。
[CA マネージャー] タブをクリックします。
[認証局] で、作成した下位 CA を選択します。
[有効にする] をクリックします。
表示されたダイアログで [CSR をダウンロード] をクリックして、発行 CA が署名できる PEM でエンコードされた CSR ファイルをダウンロードします。
[次へ] をクリックします。
[証明書チェーンをアップロード] フィールドで、[ブラウジング] をクリックします。
拡張子が
.crt
の署名付き証明書ファイルをアップロードします。[有効化] をクリックします。
gcloud
gcloud privateca subordinates activate SUBORDINATE_CA_ID \
--pool=SUBORDINATE_POOL_ID \
--location=LOCATION \
--pem-chain ./chain.crt
以下を置き換えます。
- SUBORDINATE_CA_ID: 有効にする下位 CA の固有識別子。
- SUBORDINATE_POOL_ID: 下位 CA を含む CA プールの名前。
- LOCATION: CA プールのロケーション。ロケーションの完全なリストについては、ロケーションをご覧ください。
--pem-chain
フラグは必須です。 このフラグは、PEM でエンコードされた証明書のリストを含むファイルを受け取ります。証明書のリストは、現在の CA 証明書で始まり、ルート CA 証明書で終わります。
gcloud privateca subordinates activate
コマンドの詳細については、gcloud privateca subordinates activate をご覧ください。
署名済みの証明書がアップロードされると、次のステートメントが返されます。
Activated certificate authority [SUBORDINATE_CA_ID].
Terraform
- 署名済みの CA 証明書を
subordinate.crt
としてローカルに保存します。 - 署名者の CA 証明書を
rootCA.crt
としてローカルに保存します。 - CA の有効化後に許可されていない CSR を取得しようとするため、最初の手順で説明した CSR を取得するための構成を削除します。
次のフィールドで下位 CA の構成を更新し、
terraform apply
を実行します。pem_ca_certificate = file("subordinate.crt") subordinate_config { pem_issuer_chain { pem_certificates = [file("rootCA.crt")] } }
発行元チェーンに複数の CA が含まれている場合は、値を [file("intermediateCA.cert"), file("rootCA.crt")]
として指定します。
次のステップ
- 証明書をリクエストする方法を学習する。
- テンプレートと発行ポリシーについて学習する。