証明書発行ポリシーを追加する

CA Service で証明書発行ポリシーを追加するには、認証局(CA)が発行する証明書のタイプを制御するルールと制限を定義します。証明書発行ポリシーの詳細については、証明書発行ポリシーについてをご覧ください。

証明書発行ポリシーでは、発行された証明書に含めることができるサブジェクトとサブジェクト代替名(SAN)を指定できます。証明書発行ポリシーは、CA プールの作成時に指定できます。また、既存の CA プールを更新して発行ポリシーを追加することもできます。

詳細については、テンプレートと発行ポリシーの概要をご覧ください。

準備

  • CA Service オペレーション マネージャー(roles/privateca.caManager)または CA Service 管理者(roles/privateca.admin)の IAM ロールがあることを確認します。プリンシパルに IAM を付与する方法については、単一のロールを付与するをご覧ください。

  • CA プールを作成します

証明書発行ポリシーは、CA プールの作成時または既存の CA プールの更新時に CA プールに追加できます。

確認は次のいずれかの方法で行います。

コンソール

  1. Google Cloud コンソールの [Certificate Authority Service] ページに移動します。Certificate Authority Service に移動

  2. [CA プール マネージャー] ページで、証明書発行ポリシーを追加する CA プールの名前をクリックします。

  3. [CA プール] ページで、 [編集] をクリックします。

鍵の基本的用途を定義する

この設定は、デジタル証明書内の Key Usage フィールドを指します。証明書の秘密鍵の使用方法(鍵の暗号化、データ暗号化、証明書署名、CRL 署名など)を指定します。詳細については、鍵の用途をご覧ください。

  1. 鍵の基本的用途を選択するには、[この CA プールから発行される証明書に関する、鍵の基本的用途を指定する] 切り替えボタンをクリックし、表示されたオプションから選択します。
  2. [次へ] をクリックします。
鍵の拡張的用途を定義する

この設定は、デジタル証明書の Extended Key Usage (EKU) フィールドを指します。サーバー認証、クライアント認証、コード署名、メール保護など、キーの使用方法に関するより具体的で洗練された制限を提供します。詳細については、鍵の拡張的用途をご覧ください。

鍵の拡張的用途は、オブジェクト ID(OID)を使用して定義されます。鍵の拡張的用途を構成しない場合は、すべての鍵の使用シナリオが許可されます。

  1. 鍵の拡張的用途を選択するには、[この CA プールから発行される証明書に関する、鍵の拡張的用途を書き込む] 切り替えボタンをクリックし、表示されたオプションから選択します。
  2. [次へ] をクリックします。
ポリシー識別子を定義する

証明書の証明書ポリシー拡張機能は、発行 CA のプールが従うポリシーを表します。この拡張機能には、証明書の発行前に ID を検証する方法、証明書が取り消される方法、CA プールの完全性を確保する方法に関する情報を含めることができます。この拡張機能は、CA プールが発行する証明書を検証し、証明書がどのように使用されているかを確認するのに役立ちます。

詳細については、証明書ポリシーをご覧ください。

証明書の用途を定義するポリシーを指定するには、次の手順を行います。

  1. [ポリシー識別子] フィールドにポリシー識別子を追加します。
  2. [次へ] をクリックします。
認証局情報アクセス(AIA)OCSP サーバーを追加する

証明書の AIA 拡張機能には次の情報が含まれます。

  • 証明書の取り消しステータスを確認できる OCSP サーバーのアドレス。
  • 証明書の発行者のアクセス方法。

詳細については、認証局情報アクセスをご覧ください。

証明書の AIA 拡張機能フィールドに表示される OCSP サーバーを追加するには、次の操作を行います。

  1. [項目を追加] をクリックします。
  2. [サーバー URL] フィールドに、OCSP サーバーの URL を追加します。
  3. [完了] をクリックします。
  4. [次へ] をクリックします。
CA オプション

証明書テンプレート内の CA オプション フィールドは、結果の証明書を認証局(CA)階層で使用する方法を定義します。CA オプションは、証明書を使用して他の証明書に署名できるかどうか、署名できる場合は発行する証明書の制限を決定します。

次のいずれかを選択します。

  1. CA X.509 拡張機能の構成ファイルを含める: X.509 拡張機能を制御する証明書テンプレート内の設定を指定します。

  2. 発行済み証明書を CA にのみ使用するように制限する: このオプションは、前の手順で説明したチェックボックスをオンにした場合にのみ表示されます。このブール値は、証明書が CA 証明書かどうかを示します。true に設定されている場合、証明書は他の証明書の署名に使用できます。false の場合、証明書はエンド エンティティ証明書であり、他の証明書に署名できません。この切り替えをクリックすると、CA 証明書の拡張機能に名前の制約を定義するよう求められます。

  3. パスの長さを制限する X.509 拡張機能の構成ファイルを含めます: 特定の証明書から派生する証明書チェーンの長さを制御する設定を指定します。発行元のパスの最大長が 0 に設定されている場合、CA はエンド エンティティ証明書のみを発行できます。1 に設定されている場合、この CA 証明書の下のチェーンに下位 CA を 1 つだけ含めることができます。値が宣言されていない場合、この CA の下のチェーン内の下位 CA の数は無制限になります。

  4. [次へ] をクリックします。
追加の拡張機能を構成する

CA プールによって発行された証明書に含めるように追加のカスタム拡張機能を構成するには、次の操作を行います。

  1. [項目を追加] をクリックします。
  2. [オブジェクト識別子] フィールドに、ドット区切りの数字の形式で有効なオブジェクト識別子を追加します。
  3. [] フィールドに、識別子を base64 でエンコードした値を追加します。
  4. 高重要度な拡張機能である場合は、[高重要度な拡張機能] を選択します。

ベースライン値の構成をすべて保存するには、[完了] をクリックします。

gcloud

Google Cloud CLI を使用して CA プールに証明書発行ポリシーを追加するには、CA プールが発行できる証明書の制限を記述した YAML ファイルを作成する必要があります。コンテンツは IssuancePolicy に対応していいます。

  1. Cloud Shell エディタを使用して、次の内容を含むファイル policy.yaml を作成します。

    identityConstraints:
      allowSubjectPassthrough: true
      allowSubjectAltNamesPassthrough: true
    

    ここで

    • allowSubjectPassthrough フィールドは必須です。allowSubjectPassthrough フィールドが true に設定されている場合、サブジェクト フィールドは証明書リクエストから署名済み証明書にコピーされます。それ以外の場合、リクエストされた Subject は破棄されます。
    • allowSubjectAltNamesPassthrough フィールドが true に設定されている場合、SubjectAltNames 拡張機能は証明書リクエストから署名済み証明書にコピーされます。それ以外の場合、リクエストされた SubjectAltNames は破棄されます。
  2. 前の手順で作成したファイルを使用して CA プールの証明書発行ポリシーを更新するには、次のコマンドを実行します。

    gcloud privateca pools update POOL_NAME --location LOCATION --issuance-policy FILE_PATH
    

    以下を置き換えます。

    • POOL_NAME: CA プールの名前。
    • LOCATION: CA プールのロケーション。ロケーションの完全なリストについては、ロケーションをご覧ください。
    • FILE_PATH: policy.yaml ファイルのパス。

    gcloud privateca pools update コマンドの詳細については、gcloud privateca pools update をご覧ください。

サポートされている制限

CA Service は、次の発行ポリシーの制限をサポートしています。必要に応じて次の制限を組み合わせて、カスタム証明書発行ポリシーを構築できます。

許可される X.509 値を制限または適用する

CA プールでは、passthrough_extensions フィールドを構成することで、証明書リクエストで許可される X.509 値を制限できます。

CA プールでは、baseline_values フィールドを使用して、発行済みのすべての証明書に追加する X.509 値を明示的に指定し、リクエストされた値を上書きすることもできます。

CA プールの baseline_values 値を使用すると、次のプロパティを指定できます。

これらのオプションを組み合わせて使用することもできます。

baseline_values フィールドの一部を更新すると、更新によって baseline_values フィールドの値のセット全体が置き換えられます。

  • : 相互 TLS(mTLS)の X.509 値を使用してエンド エンティティ証明書のみを発行するように CA を制限します。

    policy.yaml

    baselineValues:
      caOptions:
        isCa: false
      keyUsage:
        baseKeyUsage:
          digitalSignature: true
          keyEncipherment: true
        extendedKeyUsage:
           clientAuth: true
           serverAuth: true
    
  • : ベースラインの AIA OCSP URL を使用してエンド エンティティ コード署名証明書のみを発行するように CA を制限します。

    policy.yaml

    baselineValues:
      caOptions:
        isCa: false
      keyUsage:
        baseKeyUsage:
          digitalSignature: true
        extendedKeyUsage:
          codeSigning: true
      aiaOcspServers:
        -   "http://foo.bar/revocation"
      additionalExtensions:
      -   objectId:
            objectIdPath:
              -   1
              -   2
              -   3
          critical: false
          value: "base64 encoded extension value"
    

エンド エンティティ mTLS の証明書プロファイルの詳細については、エンド エンティティ mTLS をご覧ください。

許可される ID フィールドを制限する

CA プールを介して発行された証明書の ID を制限するには、発行ポリシーの identity_constraints フィールドに [Common Expression Language(CEL)][4]{: .external} 式を追加します。CEL 式を使用すると、証明書のサブジェクト ドメイン名(共通名を含む)と SAN に任意の制限を適用できます。

CEL 式を使用して Subject と SAN を制限する方法については、CEL の使用をご覧ください。

  • : 指定されたサブジェクトに一致する証明書のみを CA が発行できるようにします。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: true
      allowSubjectAltNamesPassthrough: false
      celExpression:
        expression: 'subject.organization == "Example LLC" && subject.country_code in ["US", "UK"]'
    

    celExpression フィールドは省略可能です。証明書が署名される前に、Common Expression Language(CEL)式を使用して、解決された X.509 サブジェクトと SAN を検証します。CEL 式の使用方法の詳細については、CEL の使用をご覧ください。

  • : DNS 名が us.google.org であるか、.google.com で終わる SAN のみを許可します。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == DNS && (san.value == "us.google.org" || san.value.endsWith(".google.com")) )'
    
  • : URI が https://google.com/webhp または spiffe://example-trust-domain-1/ns/namespace1/sa/ で始まる SAN のみを許可します。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == URI && (san.value == "https://google.com/webhp" || san.value.startsWith("spiffe://example-trust-domain-1/ns/namespace1/sa/")) )'
    
  • : メールアドレスが example@google.com であるか、@google.org で終わる SAN のみを許可します。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == EMAIL && (san.value == "example@google.com" || san.value.endsWith("@google.org")) )'
    
  • : 特定の OID とカスタム値を持つカスタム SAN のみを許可します。

    policy.yaml

    identityConstraints:
      allowSubjectPassthrough: false
      allowSubjectAltNamesPassthrough: true
      celExpression:
        expression: 'subject_alt_names.all(san, san.type == CUSTOM && san.oid == [1, 2, 3, 4] && san.value == "custom-data" )'
    

発行済み証明書のバックデート期間を制限する

発行済み証明書の過去の not_before_time を設定するには、backdate_duration フィールドを使用します。構成すると、この CA プールの証明書の not_before_time は、発行時刻から指定された期間を差し引いた値になります。not_after_time は、リクエストされた証明書の有効期間を維持するように調整されます。backdate_duration は 48 時間以下にする必要があります。

証明書を 1 時間遡って日付を設定するには、次の policy.yaml ファイルを使用します。

policy.yaml

backdateDuration: 3600s

発行済み証明書の最大存続時間を制限する

発行済み証明書の有効期間を制限するには、maximum_lifetime フィールドを使用します。証明書の要求された有効期間が最大有効期間よりも長い場合、証明書の有効期間は明示的に切り捨てられます。

最大有効期間を 30 日にするには、次の policy.yaml ファイルを使用します。

policy.yaml

maximumLifetime: 2592000s

許可される証明書発行モードを制限する

証明書は、証明書署名リクエスト(CSR)またはリクエストされた値のインライン説明のいずれかを使用してリクエストできます。後者の方法では関連付けられた秘密鍵の所有権の証明を必要としないため、使用できるオプションに制限を追加することを望む組織もあるかもしれません。これらの制限は、allowedIssuanceModes フィールドを使用して設定できます。

CA プールから証明書をリクエストする方法の指定について詳しくは、IssuanceModes をご覧ください。

証明書のリクエストの詳細については、証明書リクエストを作成するをご覧ください。

  • : CSR の発行のみを許可します。

policy.yaml

allowedIssuanceModes:
  allowCsrBasedIssuance: True
  allowConfigBasedIssuance: False

証明書リクエストの公開鍵アルゴリズムを制限する

証明書で使用できる最小鍵長と公開鍵アルゴリズムを制限するには、証明書発行ポリシーの YAML ファイルの allowedKeyTypes フィールドを使用します。このフィールドが指定されている場合、証明書リクエストの公開鍵は、YAML ファイルにリストされている鍵タイプのいずれかと一致する必要があります。このフィールドが指定されていない場合は、モジュラス サイズが 2,048 ビット未満の RSA 鍵を除き、任意の鍵を使用できます。モジュラス サイズが 2,048 ビット未満の RSA 鍵を使用する場合は、証明書発行ポリシーを使用して明示的に許可する必要があります。

: モジュラス サイズが 3,072~4,096 ビット(両端を含む)の RSA 鍵か、NIST P-256 曲線を使用した楕円曲線の Digital Signature Algorithm(ECDSA)鍵を許可します。

policy.yaml

allowedKeyTypes:
-   rsa:
  minModulusSize: 3072
  maxModulusSize: 4096
-   ellipticCurve:
      signatureAlgorithm: ECDSA_P256

次のいずれかの楕円曲線署名アルゴリズムを選択できます。

  • EC_SIGNATURE_ALGORITHM_UNSPECIFIED - 任意の署名アルゴリズムを使用できます。
  • ECDSA_P256 - NIST P-256 曲線を使用した楕円曲線デジタル署名。
  • ECDSA_P384 - NIST P-384 曲線を使用した楕円曲線デジタル署名。
  • EDDSA_25519 - RFC 8410 で記述されている、曲線 25519 上のエドワード曲線 Digital Signature Algorithm。

次のステップ