2013年4月12日金曜日

IDP拡張フィールドを含むCRLをOpenSSLがうまく処理できなかった話(未解決)

CRLに関する備忘録。
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 scope
CRLのスコープが違うと怒られている。そんなはずないんだけど。

本件、未だ解決できてない。
X.509やOpenSSLに詳しい人の助言求む。
ちなみに、IDP拡張フィールドを含まないCRLを指定して同コマンドを実行したところ、想定通りにデジタル証明書の検証が行われた。

0 コメント:

コメントを投稿