oauth.jp: Y!J API が止まった日 - GlobalSign の Root 証明書切れから学んだこと
http://oauth.jp/blog/2014/01/30/globalsign-root-cert-expired/
(引用) 昨日あたりから、Yahoo! Wallet や YConnect といった、Yahoo! Japan の API にアクセスできなくなったって人、ちらほらいるかもしれませんね。
というブログの記事を見つけまして、ざっと目を通してみてもよくわからなかったのでちょっと証明書など見てみました。

試しに https://userinfo.yahooapis.jpに繋いでみても問題なさそう。

ちゃんとした説明はYahooデベロッパーネットワークの「WebAPIやOpenIDでSSLエラーが起きる現象につきまして(2014.01.29)」に書いてありました。

GlobalSignのリポジトリには2つのルート証明書があって有効期限が切れたのはこのページの下の方の証明書みたいです。最初は、検証ができないというので相互認証してたり、鍵更新のあたりがおかしいのかと疑って証明書をいろいろみてみたわけです。

最新のブラウザで表示される検証の成功する証明書のチェーンは以下のようでした。

ルートCA証明書
シリアル番号04:00:00:00:00:01:15:4b:5a:c3:94
署名アルゴリズムSHA1withRSA
主体者名C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
有効期間1998/09/01-2028/01/28
主体者鍵ID607B661A450D97CA89502F7D04CD34A8FFFCFD4B
サブCA証明書
発行者名C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
主体者名C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - G2
有効期間2011/04/13-2022/04/13
発行者鍵ID607B661A450D97CA89502F7D04CD34A8FFFCFD4B
主体者鍵ID5D46B28DC44B741CBBEDF573B63AB7388F759E7E
それじゃぁ、期限切れになった証明書を見てみると
期限切れになったルートCA証明書
シリアル番号02:00:00:00:00:00:d6:78:b7:94:05
署名アルゴリズムMD5withRSA
主体者名C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
有効期間1998/09/01-2014/01/28(確かに期限切れ)
主体者鍵ID607B661A450D97CA89502F7D04CD34A8FFFCFD4B(あれれ?)
これなんだかなぁ。主体者鍵IDが同じ、つまり同じルート鍵を使ったままで、有効期限とシリアル番号と署名アルゴリズムが違う証明書があるわけです。(そういえば前にみたっけ)。こういう事していいんでしたっけ?ルート鍵更新しなくていいんでしたっけ?

結局、クライアント側すなわちYahoo APIを使う側が、ルート証明書ストアをちゃんとアップデートしてなくて、そのために接続できなかっただけという事なんですね。(そう理解してから読むとブログの記事も呑みこめました。)

Debian 5だと問題だったと書いてあるので見てみるとDebianの場合には /etc/ssl/certs にルート証明書ストアがあって、ca-certificatesというパッケージでアップデートされているわけですがDebian 5は2012年2月6日にとっくにサポート終了になっているので、そりゃ文句を言ってもしかたがない。CentOS 5についてはフルアップデートは2014年Q1まで、メンテナンスサポートは2017年3月31日まで提供されるのでCentOS 5では今回の問題にはならないんだろうと思います。

結局、今回の影響はあまりなくて

  • ウェブブラウザを使っていてちゃんとアップデートをしている人にはあまり影響はなかったはず
  • OSのアップデートもちゃんとしている人にはあまり影響がなかったはず
  • CentOSにもOpenSSLトラストリストを持つようなパッケージは確かなかったっぽいので影響はない。CentOS 5もまだサポートされているので問題ないはず。
  • 他のLinux、なんとかBSDなんかもOpenSSLのトラストリストを持つパッケージが無いので問題なさそう。
  • Debian、Ubuntuだけはca-certificatesというパッケージがあるのでDebian5みたいなサポート終了しているものでは問題になるケースがあった。
というところなのかなと思います。

もっと面白い話が見つかるかと思ったけど、それほどでもなかったorz 鍵更新や相互認証じゃないっていうのはどうなんですかねぇ?