TwitterApiからNo trusted certificate found
2013/12/11から突然TwitterApiにアクセスできなくなった。javaからTwitterApiにアクセスしているプログラム。javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate foundでエラー。前回も、TwitterApiではないが、No trusted certificate foundがでた事象があったので、SSLの証明書がらみとあたりをつける。どうやら、Twitter側でSSL証明書を変更したらしい。https://dev.twitter.com/docs/security/using-sslを読むと、DigicertとVerisignのルート証明書を自サーバに入れろとのこと。うーん。とりあえず、自サーバの状態を調べる。keytool -printcert今インストールされているルート証明書の一覧がでる。Verisignはインストールされているみたいだなぁ。(落ちとして、ここに問題があるんだが)Digicertをインストールするか。https://www.digicert.com/digicert-root-certificates.htmをみる。・・・・どれだ?「DigiCert High Assurance EV Root CA」かな?Downloadリンクからダウンロードして、サーバにUPして・・・。/usr/java/j2sdk1.4.2_12/bin/keytool -import -alias digicertevrootca -keystore /usr/java/j2sdk1.4.2_12/jre/lib/security/cacerts -file DigiCertHighAssuranceEVRootCA.crtこんな感じ。(javaのパスと、cacertsファイルの場所は適切な位置に直してください。一行のコマンドです。)aliasの後ろの名前「digicertevrootca」の部分は何にすべきかよくわからなかったが、digicertevrootcaで。あとはいつもどおり。(http://plaza.rakuten.co.jp/keborin/diary/201106090000/)で、Tomcat再起動。さぁうまくいくなか。わくわく・・・・・・・・・・・・・・・・だめだ。No trusted certificate foundがでちまうぜ。何故だ?Verisignか?https://dev.twitter.com/docs/security/using-sslには、VerisignのG3を入れろとかいてある。G3はインストールされている。keytool -printcertで確認。(ちなみに、http://docs.oracle.com/javase/jp/6/technotes/tools/windows/keytool.htmlにaliasの名前が書いてあった。)原因は、公開鍵長RSA 1,024bitは使えなく、RSA 2,048bitでないとだめらしい。でもG3(VeriSign Class 3 Public Primary Certification Authority - G3)は、RSA 2,048bitで、それはインストールされている。うーん。G5(VeriSign Class3 Public Primary Certification Authority - G5)でもインストールしてみるか。https://www.symantec.com/page.jsp?id=rootsからVeriSign Class 3 Primary CA - G5をダウンロードする。PCA-3G5.pemです。/usr/java/j2sdk1.4.2_12/bin/keytool -import -alias verisignclass3g5ca -keystore /usr/java/j2sdk1.4.2_12/jre/lib/security/cacerts -file PCA-3G5.pemこんな感じでインストール。tomcat再起動。ダメだろうと思いながら、TwitterApiを起動するアプリ実行。あれ?あれ?あれ?うまく行きました。なぜ?