2015-11-14 243 views
0

當發送GET請求來www.sunnyportal.com錯誤代碼出現在控制檯中,如下:Get請求handshake_faliure:javax.net.ssl.SSLHandshakeException

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) 
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979) 
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086) 
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359) 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343) 
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) 
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
at personal.Project.GetUrl.getReq(GetUrl.java:25) 
at personal.Project.GetUrl.main(GetUrl.java:34) 

我嘗試以下頁面沒有運氣:

+ Received fatal alert: handshake_failure through SSLHandshakeException

+ How to solve javax.net.ssl.SSLHandshakeException Error?

這裏是我的代碼:

package personal.Project; 

    import java.io.IOException; 

    import java.io.InputStream; 

    import java.net.MalformedURLException; 

    import java.net.URL; 

    import java.net.URLConnection; 

    import java.net.URLEncoder; 

    public class GetUrl { 

     private String url = "https://www.sunnyportal.com/Templates/ChartValues.aspx"; 

private String charset = "UTF-8"; // Or in Java 7 and later, use the constant: java.nio.charset.StandardCharsets.UTF_8.name() 
private String login = "<>"; 
private String password = "<>"; 

public String getReq() throws MalformedURLException, IOException 
{ 
    String query = String.format("login=%s&password=%s", 

      URLEncoder.encode(login, charset), 
      URLEncoder.encode(password, charset)); 

     URLConnection c = new URL(url + "?" + query).openConnection(); 
     c.setRequestProperty("Accept-Charset", charset); 
     InputStream response = c.getInputStream(); 

     return response.toString(); 
} 
public static void main (String args[]) 
{ 
    GetUrl data = new GetUrl(); 
    String getString = null; 
    try { 
     getString = data.getReq(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.exit(1); 
    } 

    System.out.println(getString); 
} 

} 

會很樂意幫助解決這個問題,提前致謝!

回答

2

根據https://www.ssllabs.com/ssltest/analyze.html?d=sunnyportal.com該服務器只協商一個密碼組TLS_RSA_WITH_AES_256_CBC_SHA,它使用AES和256位密鑰。

如果您正在使用甲骨文的Java使用任何對稱密碼超過128位,其中包括AES 256,你必須下載並安裝JCE無限強度仲裁策略文件的版本。對於當前支持的版本8,在通用下載頁面底部附近http://www.oracle.com/technetwork/java/javase/downloads/index.html它鏈接到http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html。對於舊版本搜索,發現http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.htmlhttp://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

PS:暗示SSLHandshakeException while connecting to a https site,雖然我不確定你是否可以預料到會發現。

+0

現在我有文件是有一個特定的文件夾,我必須把它放進去?或者我剛剛起來並運行它? –

+0

@PeterSparks你解壓縮它(在現代Windows資源管理器中打開的是這樣做的),並把兩個jar放到你的JRE的'lib/security'目錄中,替換'受限'的目錄。您的JRE的位置因您的平臺和(通常)您的安裝方式而有很大差異,您不會這麼說。在zip中還有一個README文件,試圖解釋這一點,但仍然沒有涵蓋所有可能的情況。 –