Shammer's Philosophy

My private adversaria

X509証明書項目-証明書ポリシー(PolicyIdentifier)

説明(書籍から一部引用)

これは証明書の用途に関するポリシー識別子と修飾子のリストです。ポリシー識別子は証明書パスを検証する過程で使用することができます。ポリシー拡張領域が他の認証局によって発行されたCA証明書内で指定されている場合、そのポリシー拡張領域はどのようなポリシー条件の下でその証明書パスが使用可能であるかを示します。
ポリシー識別子のリストは拡張領域のpolicyIdentifierフィールドに含まれており、それ自身が特定の証明書ポリシーの識別子になります。ポリシー識別子は任意の組織が必要に応じて作成することが可能であり、任意の国の標準化団体(米国ではANSI)に登録し、固有の識別子を持つこともできます。修飾子は特定のポリシー識別子それぞれに対してオプションで適用できます。人間が読み取り可能な情報、ユーザー通知といったポインタまたは人間が読み取り可能なバージョンのポリシーがある場所を示すURLを保持しておくのが修飾子です。
パス検証を行っているとき、ポリシー識別子は使用可能ですが、ポリシー修飾子は使用できません。パス検証中に検出されるポリシー修飾子は、検証されたパスの適用可能性を判断できるように、証明書ユーザーに提示されます。
この拡張領域にクリティカルの印がついている場合、証明書は指定されたポリシーの要件に従ってのみ使用することができます。修飾子の解釈は適用可能なポリシーによって定義されています。
拡張領域に非クリティカルの印がついている場合、証明書の用途は必ずしもリストにあるポリシーに制約されません。ポリシー修飾子は証明書ユーザーの裁量により解釈されても無視されてもかまいません。
CAは特別なポリシー識別子anyPolicyを参照して、可能なポリシーすべてとの用途について証明書が信頼できることを示します。

OpenSSLの設定例

設定ファイルをgrepすると以下のようになっている。

# grep policyIdentifier openssl.cnf 
root@tora2020:/etc/ssl# grep policy openssl.cnf 
tsa_policy1 = 1.2.3.4.1
tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7
policy		= policy_match
# For the CA policy
[ policy_match ]
# For the 'anything' policy
[ policy_anything ]
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
default_policy	= tsa_policy1		# Policy if request did not specify it
other_policies	= tsa_policy2, tsa_policy3	# acceptable policies (optional)
# 

policyIdentifierという形では存在しない。よくわからないな。

個人的見解

これまで独自CA構築時に使用していた設定ファイルでも、これを定義した記憶はない。正直よくわからない。DNのOUがCAとCSRで異なると署名できない場合があり、それを合わせれば署名できた、という経験はあるが、それはおそらくこれとは違う(policy_matchとかの話)。これもAdded My TODO Listだな。