Java で以下のようなエラーが出た.
ERROR RequestThread.java(148) sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCert PathBuilderException: unable to find valid certification path to requested target
これは必要な中間認証局の証明書が
/usr/lib/jvm/java-1.6.*-sun-1.6.*.*.x86_64/jre/lib/security/cacerts 等に
入っていないため.
keytool - v --list -keystore /path/to/cacerts
で cacerts の中身を確認できる.
これに keytool を使って import すればエラーはでなくなるけど,
ユーザが指定する証明書を上記以外の場所に置けないのだろうか?
インポートは以下のように行なう.
keytool -import -alias cachain -file ca-chain.cer -keystore cacerts -trustcacerts
(追記)
- javassl - 気の向くままに・・・ - livedoor Wiki(ウィキ)
http://wiki.livedoor.jp/syo1976/d/javassl
に
- 自作証明書を使用する場合1
X509TrustManagerを用いて署名エラーを無視する
- 自作証明書を使用する場合2
証明書をインポートして使用する
- サーバ証明書の情報を取得する
- クライアント証明書を使用して通信する
などの対応方法が紹介されている.