「名前制限」は認証局証明書の中でだけ使える拡張です (MUST) 。
その証明書を含む信頼の階層の中に現れるサブジェクトの名前に制限を加えます。
具体的な対象は Subject と Subject Alternative Name です 。
拡張では Directory Name や FQDN やメールアドレスなど何かしらの形式で
その証明書以降の階層で使える・使えない名前が指定されます 。
制限が適用されるのは該当する形式の名前が指定されている場合で
制限が与えられていても該当する形式が無ければその証明書は有効となります 。
自己発行証明書に対しては「名前制限」は一般には適用されません 。
(例外はその自己発行証明書が階層の最後にくるとき)
例えば鍵の更新などの場合に発行する証明書の場合は適用されないので
スムースな運用が期待できます。
id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
NameConstraints ::= SEQUENCE {
permittedSubtrees [0] GeneralSubtrees OPTIONAL,
excludedSubtrees [1] GeneralSubtrees OPTIONAL }
GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
GeneralSubtree ::= SEQUENCE {
base GeneralName,
minimum [0] BaseDistance DEFAULT 0,
maximum [1] BaseDistance OPTIONAL }
BaseDistance ::= INTEGER (0..MAX)
NameConstraints は permittedSubtrees と excludedSubtrees で構成されます。
permittedSubtrees は許可される方で excludedSubtrees が除外される方です。
excludedSubtrees にマッチしたら permittedSubtrees にマッチしてても除外です。
permittedSubtrees があったら permittedSubtrees にマッチしなかったら除外
excludedSubtrees があったら excludedSubtrees にマッチしたら除外、かな?
この拡張はクリティカルでなくてはいけません (MUST)
X.400 Address 形式で名前を載せるべきではありません (SHOULD NOT)
NameConstraints が空な証明書を発行してはいけません (MUST NOT)
証明書を処理する場合には、「名前制限」の名前の形式として
には対応していなくてはいけません (MUST)。また、
- rfc822Name
- uniformResourceIdentifier
- dNSName
- iPAddress
の形式には対応しているべきです (SHOULD)
(これらは
Subject Alternative Name で出てきた名前の形式ですね)
クリティカルな「名前制限」にとある形式で制限が記述されていて、
検証したい階層の「名前制限」のある証明書の下位の階層の証明書の
「サブジェクト」か「サブジェクトの別名」にその形式の名前があるなら
「名前制限」に従って制限を加えるか
若しくはその証明書を拒否しなくてはいけません (MUST)
RFC 5280 では minimum と maximum は使いません
なので minimum は記述するなら 0 でなくてはいけません (MUST)
maximum は記述してはいけません (MUST)
しかし、若し minimum や maximum が記述された証明書に遭遇してしまったら
正しく解釈してやるかその階層を拒否するかしなくてはいけません (MUST)
各形式に関して
■ 制限の対象が URI の場合、URI のホスト名部分を制限します。
制限は FQDN を指定するものでなくてはいけません (MUST)。
ホスト若しくはドメイン部分を指定することができます (MAY)。
例えば "host.example.com" とか ".example.com" の形です。
"." で始まる場合、
".example.com" の場合はその前に色々なものが来ていてもマッチします。
例えば "host.example.com" や "my.host.example.com" が対象となります。
しかし "example.com" はマッチしません。
"." では始まらない場合、
ホスト名が指定されていると解釈されます。
もし、
- URI に関する制限が書いてあって
- 下位の証明書に SubjectAlternativeName があって URI が書いてあって
- URI の authority 成分にホスト名が含まれてない場合 (空とか IP アドレスとか)
その下位の証明書は拒否されなくてはいけません (MUST)
■ 制限の対象がメールアドレスの場合、以下のものが指定できます (MAY)
- 特定のメールボックス
- 特定のホストの全てのメールボックス
- 特定のドメインの全てのメールボックス
1. の場合はメールアドレスを完全な形で記述します。
2. の場合はホスト名を指定します
3. の場合は "." で始めてドメインを表現します
この場合やはり ".example.com" は "example.com" にはマッチしません
古い実装だと emailAddress がサブジェクトの DN に記載されていることがあります。
(4.1.2.6 を参照)
「名前制限」に rfc822Name 形式で記載がある場合には
サブジェクトの emailAddress にも適用されなくてはいけません (MUST)。
emailAddress の ASN.1 での書き方と OID は Appendix A に書かれています。
■ 制限の対象が DNS 名の場合 "host.example.com" のような形で書きます。
DNS 名の場合指定された文字列の左に何か足されたものもマッチします。
例えば上の場合 "www.host.example.com" もマッチします。
"host1.example.com" はマッチしません。
■ 制限の対象が directoryName の場合、空でない場合にはサブジェクトと
更にサブジェクトの別名に適用しなくてはいけません (MUST)。
directoryName の制限を確認する場合には、DN を比較しなくてはいけません (MUST)。
最低でも Section 7.1 で述べられるルールに従い比較しなくてはいけません (MUST)。
「認証局は ISO の完全な DN 比較アルゴリズムを仮定してはいけない」(MUST)
と書いてあるんですが、何でですしょう、厳しすぎるんでしょうか??
エンコーディングはサブジェクトやサブジェクトの別名に準じます (MUST)
■ 制限の対象が x400Address の場合、
サブジェクトの別名の x400Address 形式の名前を制限します。
■ 制限の対象が IP アドレスの場合、
Section 4.2.1.6 の書式に加えて以下の要件を満たさなくてはいけません (MUST)。
IPv4 の場合、8 octets を RFC 4632 の CIDR 形式で 記述します。(MUST)
IPv6 の場合、32 octets を同様の形式で記述します。(MUST)
例えば class C の 192.0.2.0 は "C0 00 02 00 FF FF FF 00" になりますが
CIDR 形式で 192.0.2.0/24 と記述します。
otherName, ediPartyName, registeredID に関しては RFC 5280 では述べません。
他の文章で指定されるのでそちらを見ましょう。
その他、符号化の話や比較については Section 7 を参照して下さい。