X.509 バージョン 3 で定義された拡張部分は
を記載する為に用意されました
「署名前証明書」の最後の部分に羅列されます
X.509 バージョン 3 では独自の拡張を追加することも想定しています
拡張部分の ASN.1 モジュールは以下の通りです:
Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension具体的にはこんな感じ
Extension ::= SEQUENCE {
extnID OBJECT IDENTIFIER,
critical BOOLEAN DEFAULT FALSE,
extnValue OCTET STRING
-- contains the DER encoding of an ASN.1 value
-- corresponding to the extension type identified
-- by extnID
}

拡張には「OID・クリティカル・ASN.1 なビット列」の 3 つが記載されます
特定の拡張を 1 つの証明書に複数記載してはいけません (MUST NOT)
OID で拡張の種類が記載され、その内容がビット列で表現されます
クリティカルにはその拡張の重要度が True/False の BOOLEAN で記載されています
デフォルトは False です
- 知らない・処理できないクリティカルな拡張があったらその証明書を拒否しないといけない (MUST)
- 知らないクリティカルではない拡張があったら無視して良い (MAY)
- 知っている拡張はクリティカルでなくても処理しなくてはいけない (MUST)
拡張を追加するのは構わないのですが、
クリティカルな拡張の扱いは気をつけて一般的な利用の妨げとならないようにしましょう。
以下の節では
インターネット PKI で使われる証明書に載せるお薦めの拡張と
どんな情報をどの拡張に載せるべきかということが述べられます。
クリティカルをどうすべきかも記載されます。
RFC 5280 で認証局がサポートすることが必須 (MUST) となっている拡張は
(認証局の証明書に記載されているべき拡張は?)
- authority key identifiers (Sections 4.2.1.1)
- subject key identifiers (Sections 4.2.1.2)
- basic constraints (Section 4.2.1.9)
- key usage (Section 4.2.1.3)
- certificate policies (Section 4.2.1.4)
更に、サブジェクトが空の証明書には
- subject alternative name extension (Section 4.2.1.6)
その他の拡張は OPTIONAL となります
RFC 5280 に従う認証局は RFC 5280 に載ってない拡張も処理できた方が良いです
証明書を発行者するとき RFC 5280 に載ってない拡張を載せることもできますが
クリティカルにしてしまうと相互運用を妨げてしまうので注意しましょう
証明書を利用するアプリケーション側で最低限知らないといけない拡張は (MUST)
key usage (Section 4.2.1.3)
- certificate policies (Section 4.2.1.4)
- subject alternative name (Section 4.2.1.6)
- basic constraints (Section 4.2.1.9)
- name constraints (Section 4.2.1.10)
- policy constraints (Section 4.2.1.11)
- extended key usage (Section 4.2.1.12)
- inhibit anyPolicy (Section 4.2.1.14)
- authority key identifiers (Sections 4.2.1.1)
- subject key identifiers (Sections 4.2.1.2)
- policy mappings (Section 4.2.1.5)

