【问题标题】:Getting SSLHandshakeException in java在java中获取SSLHandshakeException
【发布时间】:2015-06-19 06:39:19
【问题描述】:

从简单的 java 存根调用 https RESTful Web 服务时,我在 Eclipse 中遇到 SSL Hand Shake 错误,但是,在将客户端数字证书导入服务提供商共享的浏览器后,可以从浏览器访问此 URL。出于安全目的隐藏端点 URL。 请帮助我,我是从 Java 客户端使用 https Web 服务的新手。

JAVA 存根如下:

 try {
          URL url = new URL("https://*********************");
             conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("enctype","multipart/form-data");
            conn.setRequestProperty("Accept", "text/xml");
            System.out.println("Printing Connetion Object "+conn);
        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + conn.getResponseCode());
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream()))); 
        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }
        conn.disconnect();
      } catch (MalformedURLException e) {
          System.out.println("MalformedURLException-->"+conn);
        e.printStackTrace();
      } catch (IOException e) {
          System.out.println("IOException-->"+conn);
        e.printStackTrace();

      }

报错如下:

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1720)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1149)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)

【问题讨论】:

  • 使用 keytool 将证书导入您的 JRE cacerts 文件。
  • 看看this
  • 是的,我的朋友@FranMontero 是对的,照他说的去做
  • 感谢大家的快速回复.. 将按照@FranMontero 的建议尝试并让你们都知道
  • 导入到 JRE.. 但还是同样的错误 :(

标签: java eclipse ssl https digital-certificate


【解决方案1】:

如果导入密钥库不能解决您的问题.. 因为我无法解决它。 然后添加以下代码行。它对我有用。

System.setProperty( "javax.net.ssl.keyStore", "D:\\G2B.p12" );  // The path to the .p12 file
          System.setProperty( "javax.net.ssl.keyStorePassword", "****" );  // The password of the p12 file
          System.setProperty( "javax.net.ssl.keyStoreType", "pkcs12" );  // Default is JKS, we're using PKCS12

【讨论】:

  • 以上属性设置对我有用..如果我使用这种方法可能会遇到任何安全问题,请告诉我?
猜你喜欢
  • 2013-03-23
  • 2011-10-02
  • 2013-10-14
  • 2021-11-15
  • 2015-05-16
  • 2010-11-17
  • 1970-01-01
  • 2014-06-05
  • 2021-03-26
相关资源
最近更新 更多