2016-08-01 8 views
0

このhttps://www.cityofathens.gr/khe/epixeiriseis/json?shop_id=49087ページにJavaクライアントを使用していくつかのjsonデータを読み込もうとしています。奇妙なことは、私は自分のコンピュータ上でそれを実行すると、それだけで正常に動作していることですが、私は、VMにjarファイルを実行すると、私がした後、このSSLHandshakeExceptionが1台のコンピュータを使用していて、他のコンピュータで動作しています

String url="https://www.cityofathens.gr/khe/epixeiriseis/json?shop_id=49087"; 
BufferedReader in = new BufferedReader(new InputStreamReader(new URL(url).openStream())); 
String result=IOUtils.toString(in); 
System.out.println(result); 

を使用しています

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

私は、このエラーを与えていますいくつかの掘削私はHttpsURLConnectionを使用しようとしました

String url="https://www.cityofathens.gr/khe/epixeiriseis/json?shop_id=49087"; 
URL myurl = new URL(url); 
HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
InputStream ins = con.getInputStream(); 
InputStreamReader isr = new InputStreamReader(ins); 
BufferedReader in = new BufferedReader(isr); 

しかし、エラーは同じままです!

助けてくださいか? ありがとう

+0

ヘンリー、Linuxのルートとしてルート@欠落しているルート証明書 – Henry

+0

のように見えますか?クライアントまたはサーバーの面白いことに、私の古いPC上でそれを試してみましたか、それとも(Ubuntuを使用しているすべて3) –

答えて

0

他のJava VMにルートCAがありません(DSTルートCA X3)。 VM上のJRE/JDK to 7u111/8u101を更新するか、手動で証明書をキーストアに追加してください。

ダウンロード証明書:

wget https://letsencrypt.org/certs/letsencryptauthorityx1.der 
wget https://letsencrypt.org/certs/letsencryptauthorityx2.der 
wget https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.der 
wget https://letsencrypt.org/certs/lets-encrypt-x2-cross-signed.der 
wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.der 
wget https://letsencrypt.org/certs/lets-encrypt-x4-cross-signed.der 

(場所はあなたのシステムに異なる場合があります)キーストアに追加します:

sudo keytool -trustcacerts -keystore /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/security/cacerts -storepass changeit -noprompt -importcert -file letsencryptauthorityx1.der 
# repeat for the rest of *.der files 

あなたは新しい本命を使用するJavaプロセスを再起動する必要があります。

スキップ証明書の検証

また、(を推奨しません)証明書の問題を無視することができます:コードのため、このanswerをチェック:

+0

あなたは私が手でこれを行う方法を教えてくれますか? –

+0

keytool https://docs.oracle.com/javase/tutorial/security/toolsign/rstep2.htmlで作業する必要があります。証明書をダウンロードし、keytool経由でjvm keystoreにインポートします。詳細はこちらをご覧くださいhttp://stackoverflow.com/questions/373295/digital-certificate-how-to-import-cer-file-in-to-truststore-file-using – borowis

関連する問題