ETSI XAdESプラグテスト関連で、ちょっと愚痴りたいこともあり、、、、(^^;

テスト用に使うCAなんですが、よそで作られたプロトタイプCAを使っています。いろいろ面倒なことが多いんですが、今回困ってしまったのは証明書の識別名(Distinguished Name:DN)の相対識別名(RDN)の並びの順序のことです。

X.509デジタル証明書は、X.500ディレクトリを基礎としてこのディレクトリに基づいてエンティティが管理され証明書が発行される仕組みになっています。エンティティの名前が例えばディレクトリのルートから { C=JP, O=TEST, CN=USER1 } のような国(C)から始まる順序になっていたとすると、証明書の識別名もASN.1のSEQUENCEの並びで言うと { C=JP, O=TEST, CN=USER } の順序に並びます。

この並びの作り方については X.501 9.2 節 Names in Generalに規定があると知り合いの方が教えてくれました。

ITU-T Recommendation X.501 section 9.2 Names in General

The sequence of objects so identified, starting with the root and ending with the object being named, is such that each is the immediate superior of that which follows it in the sequence.


事実、世の中に流通している殆どの証明書、Windows証明書ストアに含まれる全ての証明書はこの正順(即ちDITの上から順)にRDNが並んでいるわけです。

前回のETSI Remote XAdES Plugtestでは、IAIKのライブラリで直接作った証明書だったようで正順にならんでいて問題なかったわけですが、今回のプラグテストではとあるCAプロトタイプ製品を使うことになっており、これがなかなか曲者で、RDNの順序が逆順になってしまっています。

逆順になっていて具体的に問題となるのは以下のような点です。

  • パス構築をディレクトリを使う実装の場合、逆順でマッチしないため証明書の取得に失敗する場合がある。

  • CA間の相互認証の際、一方が正順、他方が逆順であった場合に名前の順序に整合性が無い、相互認証がうまくいかないなどのトラブルがある場合がある。



何より、プラグテストの設計は署名やPKIの専門家がやっているわけですから、変な悪例を残してしまうとそれがデファクトとして勘違いされたり、後々困ったことになります。

その辺りなかなか理解してもらえなくて、「何で逆順じゃだめなのか?問題があるなら規定を引用して示せ」と言われる始末、、、、いやぁ、、、そのCAプロトタイプのトラブルシューティングするためにボランティアやっているわけじゃないんですけどね、、、トホホ、、、、

面倒だなとは思いましたが、仕方なくちゃんと丁寧な図入りと標準の引用と、数回の不毛なメールのやり取りと電話会議で何とか納得してもらい、とりあえず無事、正順になるようには直してもらいました。はぁ〜〜〜〜、疲れた。

まだ、streetAddressなんか入れられるようにはなったままで、これがまた変な位置に入っているんですが、genderとか余計なものは取り除かれてとりあえず良かったかな、、、と、、、(ちなみにstreetAddressはRFC 3280の規定外)

実は、CAdESよりもXAdES(or XMLDSig)の方が証明書の識別名についてかなり厄介な問題を抱えています。この件については、また別の機会に、、、、

<参考>
ITU-T Recommendation X.501 (02/01) Download (PDF版は無償ダウンロード可)
http://www.itu.int/rec/T-REC-X.501-200102-I/e
RFC 3280 Annex C.1 (証明書の例はちゃんと正順)
http://www.ietf.org/rfc/rfc3280.txt
IPA/JNSA Challenge PKI 2001 報告書
http://www.ipa.go.jp/security/fy13/report/pki_interop/pki_interop.pdf