2016-04-06 12 views
0

私はサーバーとドメインnodeserver.fvds.ruを持っており、 "暗号化を許可する"というhttpsが設定されています。 Nginxは、すべての要求をローカルjavaプログラムにリダイレクトして、一部のポートをリッスンします。私のブラウザは要求を送ることができます。また、Advanced REST Clientと呼ばれるChromeプラグインを使用してリクエストを送信することもできます。私はこのようなJavaを使用して要求を取得送信しようとした場合でも: sun.security.validator:JavaとHTTPSのトラブル

public static String getResponse(String urlToRead) throws Exception { 
     StringBuilder result = new StringBuilder(); 
     URL url = new URL(urlToRead); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     String line; 
     while ((line = rd.readLine()) != null) { 
      result.append(line); 
     } 
     rd.close(); 
     return result.toString(); 
    } 

    public static void main(String[] args) throws Exception 
    { 
     System.out.println(getResponse("https://nodeserver.fvds.ru/")); 
    } 

私はスレッド "メイン" javax.net.ssl.SSLHandshakeExceptionに

例外を取得します。 ValidatorException:PKIXパスの構築に失敗しました: sun.security.provider.certpath.SunCertPathBuilderException:できないを に

答えて

0

が要求されたターゲットへの有効な証明書パスを見つけますよURサーバー証明書自己署名?そうであれば、Javaはサーバー証明書からその信頼できるCAへの証明書パスを見つけることができません。

pusposesをテストするだけの場合は、Javaクライアントトラストストア(デフォルトではJRE_PATH/lib/security/cacerts)に自己署名サーバー証明書を追加できます。

それは本番環境なら、私が言ったように、あなたは私がhttps://letsencrypt.org/を使用し、自己署名証明書

+0

の使用を避けるべきです。私はそれが自己署名しているとは思わない。 – Tony

+1

申し訳ありません@トニー、私はencryptが何であるか分かりませんでした。その証明書があなたのサーバーJavaバージョンによって信頼されているかどうか知っていますか?それは私のものではないように見える...(https://community.letsencrypt.org/t/will-the-cross-root-cover-trust-by-the-default-list-in-the-jdk- jre/134)。 –

+0

そのサーバーがあなたのJavaバージョンに対して信頼されていない場合は、そのサーバーをトラストストアに追加すると問題が解決するはずです –