ルート認証局の作成
このページでは、CA プールにルート認証局(CA)を作成する方法について説明します。
ルート CA は公開鍵基盤(PKI)階層の最上位にあり、PKI のトラスト アンカーを形成します。PKI に適切に参加して証明書を使用するには、デバイス、ソフトウェア、コンポーネントが PKI を信頼する必要があります。これは、ルート CA を信頼するようにデバイス、ソフトウェア、コンポーネントを構成することで実現します。その結果、ルート CA によって発行されたすべての証明書が信頼されます。
始める前に
- CA Service オペレーション マネージャー(
roles/privateca.caManager
)または CA Service 管理者(roles/privateca.admin
)の IAM ロールがあることを確認します。詳細については、IAM ポリシーを構成するをご覧ください。 - CA プールを作成します。
- CA の設定を確認します。
ルート CA を作成する
ルート CA には自己署名証明書があり、クライアントのトラストストアに配布する必要があります。ルート CA の証明書は、証明書チェーンの最上位にあります。他の CA が CA 証明書を取り消すことはできません。ルート CA の CRL は、ルート CA が発行した他の証明書にのみ適用され、ルート CA 自体には適用されません。
ルート CA を作成するには、次の手順を行います。
Google Cloud コンソールの [Certificate Authority Service] ページに移動します。
[CA マネージャー] タブをクリックします。
[CA を作成] をクリックします。
CA タイプの選択
CA の永続的な設定(ティア、ロケーション、存続期間、作成時の動作状態など)を構成するには、次の手順を行います。
- [ルート CA] を選択します。
- [有効期間] フィールドに、CA 証明書が発行した証明書を有効にする期間を入力します。
- 省略可: CA のティアを選択します。
- [リージョン] をクリックし、リスト内で CA を作成するロケーションを選択します。CA は、アプリケーションのクライアントに地理的に近い場所に作成することをおすすめします。詳細については、最適なロケーションを選択するをご覧ください。
省略可: 作成する 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 を作成します。
ノードプールを作成するには、次のコマンドを実行します。
gcloud privateca pools create
POOL_ID --location=LOCATION 以下を置き換えます。
- POOL_ID: CA プールの名前。
- LOCATION: CA プールを作成するロケーション。ロケーションの完全なリストについては、ロケーションをご覧ください。
詳細については、CA プールを作成するをご覧ください。
この
gcloud
コマンドの詳細については、gcloud privateca pools create をご覧ください。作成した CA プールに新しいルート CA を作成します。
gcloud privateca roots create
ROOT_CA_ID \ --location=LOCATION \ --pool=POOL_ID \ --key-algorithm=KEY_ALGORITHM \ --subject="CN=my-ca, O=Test LLC"以下を置き換えます。
- ROOT_CA_ID: CA の名前。
- LOCATION: CA プールのロケーション。
- POOL_ID: CA プールの名前。
- KEY_ALGORITHM: Cloud KMS 鍵の作成に使用するアルゴリズム。このフラグは省略可能です。このフラグを含めない場合、鍵アルゴリズムはデフォルトで
rsa-pkcs1-4096-sha256
になります。詳細については、--key-algorithm フラグをご覧ください。
デフォルトでは、CA は
STAGED
状態で作成されます。CA を有効にするには、--auto-enable
フラグを含めます。CA 証明書と CRL の公開に顧客管理の Cloud Storage バケットを使用する場合は、コマンドに
--bucket bucket-name
を追加します。bucket-name は、Cloud Storage バケットの名前に置き換えます。すべてを網羅した設定のリストを表示するには、次のコマンドを実行します。
gcloud privateca roots create --help
Google が所有し、Google が管理する 暗号鍵を使用してルート CA を作成するには、次の構成例を使用します。
セルフマネージド鍵を使用してルート CA を作成するには、次のサンプル構成を使用します。
CA Service への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
CA Service への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
CA Service への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
ルート CA を作成します。
HTTP メソッドと URL:
POST https://privateca.googleapis.com/v1/projects/
PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities?certificate_authority_id=ROOT_CA_ID リクエストの本文(JSON):
{ "type": "SELF_SIGNED", "lifetime": { "seconds": 315576000, "nanos": 0 }, "config": { "subject_config": { "subject": { "organization": "
ORGANIZATION_NAME ", "common_name": "COMMON_NAME " } }, "x509_config":{ "ca_options":{ "is_ca":true }, "key_usage":{ "base_key_usage":{ "cert_sign":true, "crl_sign":true } } } }, "key_spec":{ "algorithm":"RSA_PKCS1_4096_SHA256" } }リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities?certificate_authority_id=ROOT_CA_ID "PowerShell(Windows)
リクエスト本文を
request.json
という名前のファイルに保存して、次のコマンドを実行します。$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities?certificate_authority_id=ROOT_CA_ID " | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/
PROJECT_ID /locations/LOCATION /operations/operation-UUID ", "metadata": {...}, "done": false }オペレーションが完了するまでポーリングします。
HTTP メソッドと URL:
GET https://privateca.googleapis.com/v1/projects/
PROJECT_ID /locations/LOCATION /operations/operation-UUID リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID "PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID " | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/
PROJECT_ID /locations/LOCATION /operations/operation-UUID ", "metadata": {...}, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CertificateAuthority", "name": "...", } }
CA が想定どおりに動作していることを確認したら、CA プールのロードバランスされた証明書の発行を開始できます。
ルート CA を有効にする
ルート CA を有効にするには、次の gcloud
コマンドを実行します。
gcloud privateca roots enable ROOT_CA_ID --location=LOCATION --pool=POOL_ID
以下を置き換えます。
- ROOT_CA_ID: CA の名前。
- LOCATION: CA プールのロケーション。ロケーションの完全なリストについては、ロケーションをご覧ください。
- POOL_ID: CA プールの名前。
Terraform を使用してルート CA を作成すると、ルート CA は作成時に有効になります。STAGED
状態でルート CA を作成するには、CA の作成時に desired_state
フィールドを STAGED
に設定します。
CA の作成後に、desired_state
フィールドを ENABLED
または DISABLED
に設定できます。
CA Service への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
CA Service への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
CA Service への認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。
CA が CA プールから証明書を発行できるようにします。
HTTP メソッドと URL:
POST https://privateca.googleapis.com/v1/projects/
PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities/ROOT_CA_ID :enableリクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities/ROOT_CA_ID :enable"PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /caPools/POOL_ID /certificateAuthorities/ROOT_CA_ID :enable" | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/
PROJECT_ID /locations/LOCATION /operations/operation-UUID ", "metadata": {...}, "done": false }オペレーションが完了するまでポーリングします。
HTTP メソッドと URL:
GET https://privateca.googleapis.com/v1/projects/
PROJECT_ID /locations/LOCATION /operations/operation-UUID リクエストを送信するには、次のいずれかのオプションを展開します。
curl(Linux、macOS、Cloud Shell)
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID "PowerShell(Windows)
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://privateca.googleapis.com/v1/projects/PROJECT_ID /locations/LOCATION /operations/operation-UUID " | Select-Object -Expand Content次のような JSON レスポンスが返されます。
{ "name": "projects/
PROJECT_ID /locations/LOCATION /operations/operation-UUID ", "metadata": {...}, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.security.privateca.v1.CertificateAuthority", "name": "...", } }
CA をテストする
CA が証明書を発行できることを確認するには、関連する CA プールから証明書をリクエストし、--ca
フラグを使用してテストする CA の名前を明示的に指定します。
CA プールから証明書をリクエストするには、次の方法を使用できます。
- CA サービスに秘密鍵または公開鍵を作成させます。
- 独自の秘密鍵または公開鍵を生成し、証明書署名リクエスト(CSR)を送信します。
自動生成された秘密鍵または公開鍵を使用して、CA プールの CA から証明書をリクエストする方がより簡単です。このセクションでは、その方法を使用して CA をテストする方法について説明します。
自動生成された秘密鍵または公開鍵を使用して CA プールの CA から証明書をリクエストするには、次の gcloud
コマンドを実行します。
gcloud privateca certificates create \
--issuer-pool=POOL_ID \
--issuer-location=ISSUER_LOCATION \
--ca=ROOT_CA_ID \
--generate-key \
--key-output-file=KEY_FILENAME \
--cert-output-file=CERT_FILENAME \
--dns-san=DNS_NAME
以下を置き換えます。
- POOL_ID: CA プールの名前。
- ISSUER_LOCATION: デジタル証明書を発行した認証局(CA)のロケーション。
- ROOT_CA_ID: テストする CA の固有識別子。
- KEY_FILENAME: 生成された鍵が PEM 形式で書き込まれるファイル。
- CERT_FILENAME: 生成された PEM エンコードされた証明書チェーン ファイルが書き込まれるファイル。証明書チェーンの順序はリーフからルートです。
DNS_NAME: 1 つ以上のカンマ区切りの DNS サブジェクト代替名(SAN)。
--generate-key
フラグは、マシンに新しい RSA-2048 秘密鍵を生成します。
証明書署名リクエスト(CSR)を使用して CA プール内の CA の証明書をリクエストする、または証明書のリクエストの詳細については、証明書のリクエストと発行済み証明書の表示をご覧ください。
認証局のクローンを作成する
CA を更新するために既存の CA のクローンを作成する、または同じ構成で新しい CA を作成するには、次のコマンドを実行します。
gcloud privateca roots create NEW_CA_ID \
--location=LOCATION \
--pool=POOL_ID \
--from-ca=EXISTING_CA_ID \
--key-algorithm "ec-p384-sha384"
以下を置き換えます。
- NEW_CA_ID: 新しい CA の固有識別子。
- LOCATION: CA プールのロケーション。
- POOL_ID: 新しい CA を作成する CA プールの名前
- EXISTING_CA_ID: ソース CA の ID またはソース CA の完全修飾識別子。
--from-ca
フラグは、ルートと下位 CA の作成でサポートされています。既存の CA は、新しい CA と同じ CA プールにある必要があります。
--key-algorithm
フラグは、既存の CA からすべての CA 構成をコピーします(Cloud KMS 鍵のバージョンと Cloud Storage バケットを除く)。ただし、適切なフラグを明示的に指定して、新しい CA の構成値を上書きすることもできます。たとえば、--subject SUBJECT を指定すると、新しいサブジェクトを使用できます。
--key-algorithm
フラグを省略すると、アルゴリズムにより以下のデフォルト値となります。
rsa-pkcs1-4096-sha256
(ルート CA)。rsa-pkcs1-2048-sha256
(下位 CA)
この gcloud
コマンドの詳細については、gcloud privateca roots create をご覧ください。
次のステップ
- 下位 CA を作成する方法を学習する。
- 証明書をリクエストする方法を学習する。
- テンプレートと発行ポリシーについて学習する。