2007-04-17

λ IE7の普及でサーバ証明書失効トラブルが続出するかも?

https://www.gootencash-sys.jp/ に対する証明書は、ただの期限切れではなくて Opera9.2で「新しい証明書が発行されているため証明書は破棄されました」と表示される件。

どういう状態なのか OpenSSL のコマンドで追ってみた。

% dig www.gootencash-sys.jp
  → IPアドレスは 211.12.39.69:443
% openssl s_client -connect 211.12.39.69:443
  →www.gootencash-sys.jpの証明書を入手。結果として表示されている
  -----BEGIN CERTIFICATE----- から -----END CERTIFICATE-----までを www.gootencash-sys.jp.crt として保存
% openssl x509 -in www.gootencash-sys.jp.crt -issuer -noout
issuer= /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
% less /usr/local/share/curl/curl-ca-bundle.crt
  → CAの証明書を入手。上記 issuer である /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority を探す
  そいつの-----BEGIN CERTIFICATE----- から -----END CERTIFICATE-----までを RSASecureServer.crt として保存
% openssl x509 -in www.gootencash-sys.jp.crt -text -noout
  → OCSPのURIを入手する
          Authority Information Access: 
              OCSP - URI:http://ocsp.verisign.com
% openssl ocsp -issuer RSASecureServer.crt -cert www.gootechcach-sys.jp.crt -no_nonce -url http://ocsp.verisign.com -CAfile /usr/local/share/curl/curl-ca-bundle.crt
Response verify OK
www.gootechcach-sys.jp.crt: revoked
        This Update: Mar  6 14:42:00 2007 GMT
        Next Update: Jun  1 14:20:29 2007 GMT
        Reason: superseded
        Revocation Time: Dec  1 00:45:18 2005 GMT

Reason: superseded が「新しい証明書が発行されているため証明書は破棄されました」つーことだな。 古い証明書に対する秘密鍵が漏洩した可能性が高いが、それはともかく新しい証明書が発行されているのに 古い証明書で運用している理由はないはずなので、この場合利用を継続させることはないだろうというIE7の処置は正しい。 それ以上に Opera9.2 の表示は素晴らしい。

単純に期限切れの場合はどうなるのかは別途調査が必要だ。

ちなみに CRLファイルを入手して失効チェックすることは可能だが、CRLファイルを openssl crl に食わせた結果では失効理由が分からなかった。

(追記) RFC3280によると、失効理由のフラグは以下のように定義されている

ReasonFlags ::= BIT STRING {
     unused                  (0),
     keyCompromise           (1),
     cACompromise            (2),
     affiliationChanged      (3),
     superseded              (4),
     cessationOfOperation    (5),
     certificateHold         (6),
     privilegeWithdrawn      (7),
     aACompromise            (8) }

keyCompromise(秘密鍵の漏洩)は別に定義されているので、verisignを信用するなら漏洩したわけではないようだ。

CRLによる失効ではなく、単なる期限切れの場合:

SSLexpired

このように続行できる。(一時的にこのサイトの証明書を今年1月まで有効の奴に差し替えてみた)

[]