CRLとCDPについておさらい
CRL(証明書失効リスト)とは、文字通り「失効したデジタル証明書のリスト」であり、失効済み証明書のシリアル番号が列挙されているものである。CRLは一般的にWebサーバーやLDAPサーバー等に普通のファイルとして置かれており、デジタル証明書の検証をするシステム(認証サーバー等)はそのCRLをダウンロードして利用する。
下記は、とあるサーバーからダウンロードしたCRLの内容をOpenSSLで確認した例である。crlのファイル名はxxx.crlとする。(下記はDER形式の場合。PEMの場合は"-inform PEM"とする)
$ openssl crl -in xxx.crl -inform DER -text Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: /C=JP/O=HogeHoge, Ltd./CN=HogeHoge Public CA Last Update: Apr 3 10:00:00 2013 GMT Next Update: Apr 17 10:00:00 2013 GMT CRL extensions: X509v3 CRL Number: 12345 X509v3 Authority Key Identifier: keyid:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx Revoked Certificates: Serial Number: 1234 Revocation Date: Dec 12 00:00:01 2012 GMT CRL entry extensions: Invalidity Date: Dec 12 00:00:00 2012 GMT Serial Number: 1357 Revocation Date: Dec 12 00:00:01 2012 GMT CRL entry extensions: Invalidity Date: Dec 12 00:00:00 2012 GMT (snip)CRLには分割発行という考え方があって、特定の目的やルールに応じてCRLを小さい単位で分割することが可能である。この辺りの説明は、すごく古い記事だがPKI基礎講座(5):証明書の有効性 - @ITが詳しい。
で、デジタル証明書にはCDP(CRL Distribution Point)というフィールドがあり、CRLのURLが記述される。つまり、「自分が失効されているかを知りたければ、このURLに置かれているCRLをチェックせよ」ということ。
以下、デジタル証明書のCDPフィールドを確認した例。証明書のファイル名はyyy.cerとする。
$ openssl x509 -inform der -in yyy.cer -text Certificate: Data: (snip) X509v3 extensions: (snip) X509v3 CRL Distribution Points: Full Name: URI:http://hogehoge.com/hogehogeca/xxx-1.crl (snip)
IDP拡張フィールドとは
CRLを分割した場合、CRL内にIDP(Issuing Distribution Point)という拡張フィールドが含まれるのが普通であり、自身のURLが記述されている。分割したCRLを一意に識別するために利用される。下記はIDP拡張フィールドを含むCRLの内容を確認した例。CRLのファイル名はxxx-1.crl。
$ openssl crl -in xxx-1.crl -inform DER -text Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha1WithRSAEncryption (snip) CRL extensions: (snip) X509v3 Issuing Distrubution Point: Full Name: URI:http://hogehoge.com/hogehogeca/xxx-1.crl Only User Certificates (snip)デジタル証明書の検証を行う場合、
・デジタル証明書に含まれるCDPのURL
と
・CRLに含まれるIDPのURL
が一致することを確認した上で、そのデジタル証明書のシリアル番号がCRLに含まれるかを確認するのが正しい。
OpenSSLで問題発生
OpenSSL 1.0において、IDP拡張フィールドが含まれるCRLを使ってデジタル証明書の検証を行ったところ、エラーになってしまった。下記がエラーの例(ca.pemはルートCA証明書)。
なお、opensslはPEM形式がデフォルトみたいなので、事前にCRLとデジタル証明書をDER形式からPEM形式に変換してある。
$ openssl verify -CAfile ca.pem -verbose -crl_check_all -CRLfile xxx-1.pem yyy.pem yyy.pem: C = JP, O = FUGAFUGA , OU = DEV1 , CN = yyy error 44 at 1 depth lookup:Different CRL scopeCRLのスコープが違うと怒られている。そんなはずないんだけど。
本件、未だ解決できてない。
X.509やOpenSSLに詳しい人の助言求む。
ちなみに、IDP拡張フィールドを含まないCRLを指定して同コマンドを実行したところ、想定通りにデジタル証明書の検証が行われた。
0 コメント:
コメントを投稿