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 コメント:
コメントを投稿