“sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException” に対する対処

HTTPS でホストされている、あるウェブサイトをクロールする Java プログラムを動かしていたところ、次のような例外が表示された。

sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

sun.security.validator.ValidatorException は、Java の持つルート証明書ではウェブサイトの SSL 証明書の正当性を検証できないときに投げられる例外である。

この問題を解決するためにできることはふたつある。

  • ウェブサイトの SSL 証明書に対応するルート証明書を Java にインストールする
  • Java のバージョンを更新して、Java が標準で使うルート証明書を更新する

後者の方が手軽なので、今回は単に Java をアップデートすることにした。なお、前者に興味がある場合は “java keytool” などで検索するとよい。

ただし、今回の僕のケースでは Java を最新版に更新しても問題は解決しなかった。調べてみると、ウェブサイトの側の SSL 中間証明書の設定に問題があるようであった。中間証明書の設定に問題があるかどうかは、たとえば Symantec が提供するサービスなどで確認できる。

ssl-intermediate-cert-verification

“Intermediate certificate missing.” とのことだ。ここで、対応する “GeoTrust SSL CA – G3” をダウンロードして Java の適切なパスに置いてやることで、当面の問題は解決する。

ただし、ウェブサイト側は中間証明書を置かなければ、古いブラウザのユーザーを切り捨てることになるし、BEAST攻撃に対して脆弱なまま放置することにもなる。

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中