ポリシーの競合を回避、解決する
Certificate Authority Service のポリシーは、CA プールの発行ポリシーまたは証明書テンプレートのいずれかです。証明書発行ポリシーは CA プールの一般的なルールを設定しますが、証明書テンプレートはさまざまな証明書タイプに対してより具体的な手順を提供します。ポリシー制御の詳細については、ポリシー制御についてをご覧ください。ポリシーには、次の 2 つの主要な部分があります。
ベースライン値: ベースライン値(事前定義値)は、特定のポリシーによって発行されるすべての証明書に必須の設定です。たとえば、「このポリシーに基づいて発行されるすべての証明書で、
keyUsage
拡張機能でdigitalSignature
フラグを有効にする必要があります」というポリシーを作成できます。これにより、このポリシーによって発行されたすべての証明書をデジタル署名に使用できます。拡張機能の制約: 拡張機能の制約により、ポリシー自体の外部で証明書に追加できる拡張機能が制限されます。たとえば、ポリシーには「このポリシーの対象外の証明書には AIA-OCSP 拡張機能のみを追加できます」と記載できます。つまり、別のポリシーで、または証明書リクエストで直接、他の拡張機能(サブジェクト代替名など)を追加しようとすると、それらの拡張機能は無視されます。
証明書をリクエストすると、CA プールは指定されたテンプレートを使用して証明書を作成します。ただし、CA プールに適用されている発行ポリシーも、独自のルールに基づいてリクエストを評価します。競合は、証明書テンプレートの設定が CA プールに追加された証明書発行ポリシーの設定と矛盾する場合に発生します。これは、両方が同じ証明書にルールを適用しようとするためです。考えられるシナリオは次のとおりです。
重複する拡張機能の定義
競合は、両方のポリシーのベースライン値で同じ拡張機能が定義されている場合に発生します。たとえば、CA プールの発行ポリシーと証明書テンプレートで同じ拡張機能 keyUsage
を定義すると、各場所で拡張機能の異なる部分を指定した場合でも、Certificate Authority Service はこれを競合として検出します。
例:
- 発行ポリシー:
keyUsage
拡張機能にdigitalSignature: true
が必要です。 - 証明書テンプレート:
keyUsage
拡張機能にkeyEncipherment: true
が必要です。
認証局サービスは拡張機能全体を 1 つの単位として扱い、拡張機能内の特定の値ではなく、拡張機能が両方の場所で定義されているかどうかを確認するため、これは引き続き競合と見なされます。
競合を回避するには、各拡張機能を CA プールの発行ポリシーまたは証明書テンプレートのいずれかで 1 回だけ定義してください。両方で定義しないでください。これにより、明確性が確保され、証明書の発行が予期せず失敗するのを防ぐことができます。
拡張機能の制約とベースライン値が競合している
ポリシーの競合は、1 つのポリシーの拡張機能の制約が別のポリシーのベースライン値と競合する場合に発生します。これは、次のような場合に発生します。
- 1 つのポリシーで拡張機能が制限または禁止されている: すべての拡張機能の一般的な除外、または問題の拡張機能が含まれていない許可された拡張機能の特定のリストによって、拡張機能が制限または禁止されている。
- 別のポリシーで同じ拡張機能が必須になっている: つまり、2 番目のポリシーには、その特定の拡張機能にベースライン値が定義されています。
例:
- 発行ポリシー:
keyUsage
拡張機能のみを許可する拡張機能の制約があります。 - 証明書テンプレート: ベースライン値に
certificatePolicies
拡張機能が必要です。
発行ポリシーでは certificatePolicies
拡張機能が禁止されている一方で、証明書テンプレートでは certificatePolicies
拡張機能が必須であるため、競合が発生します。
ポリシーを定義する際は、ベースライン値と拡張機能の制約の両方を慎重に検討し、両者が連携するようにしてください。1 つのポリシーで、別のポリシーで必須の拡張機能を制限するような状況は避けてください。これにより、競合を防ぎ、証明書の発行をスムーズに行うことができます。
Common Expression Language(CEL)式の競合
きめ細かい制御に Common Expression Language(CEL)を使用している場合、証明書テンプレートと発行ポリシーで競合する式が原因で競合が発生する可能性があります。これらの競合により、CA プールから証明書を発行できなくなります。たとえば、ドメイン名の末尾が .example.com
である必要があるという式と、.example.net
である必要があるという式を作成できます。これらの 2 つの CEL 式は同じフィールドに異なる制限を適用するため、すべての証明書発行リクエストが失敗します。
証明書発行ポリシーと証明書テンプレートの両方を使用している場合は、CEL 式が競合しないことを確認することをおすすめします。
いずれの場合も、CA Service API は無効な引数のエラーを返します。
ポリシーの競合を解決する
CA Service API がポリシーの競合を検出すると、API は無効な引数エラーを返します。これにより、証明書リクエストが失敗します。ポリシーの競合を表示して解決するには、次の手順に従います。
- エラー メッセージが表示されている [発行ポリシーのトラブルシューティング] リンクをクリックします。トラブルシューティング ページが表示されます。ここで、CA プールの発行ポリシーのベースライン値と拡張機能の制約を、証明書テンプレートのベースライン値と拡張機能の制約と比較できます。ポリシーの競合がハイライト表示されています。
- CA プールまたは証明書テンプレートにアクセスして、競合する値を更新し、競合を解決します。
競合が解決したら、証明書リクエストを再度送信します。