SSLHandShakeException没有适当的协议

我最近在我的网站上添加了SSL,可以通过https访问。 现在,当我的java应用程序尝试向我的网站发出请求并使用缓冲读取器从中读取它时,它会生成此堆栈跟踪

我没有使用自签名证书,证书来自Namecheap,他使用COMODO SSL作为CA来签署我的证书。 即时通讯使用java 8

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) at sun.security.ssl.Handshaker.activate(Handshaker.java:503) at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1482) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1351) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) 

我的代码非常基本,只是尝试使用缓冲读取器读取我网站上的页面

  private void populateDataList() { try { URL url = new URL("https://myURL.com/Data/Data.txt"); URLConnection con = url.openConnection(); con.setRequestProperty("Connection", "close"); con.setDoInput(true); con.setUseCaches(false); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String line; int i = 0; while((line = in.readLine()) != null) { this.url.add(i, line); i++; } } catch (Exception e) { e.printStackTrace(); } } 

我已经尝试将我的SSL证书添加到JVM的密钥库中,我甚至尝试使用此代码接受每个证书(这certificate了我知道的SSL的目的)

  private void trustCertificate() { TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) { } } }; try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (GeneralSecurityException e) { } try { URL url = new URL("https://myURL.com/index.php"); URLConnection con = url.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream())); String line; while((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { } } 

我很难过,任何帮助将不胜感激!

协议被禁用或密码套件不合适
问题的关键在于该陈述。 它基本上意味着:

  1. 客户端使用的TLS实现不支持服务器证书使用的密码套件。
  2. 服务器上的TLS配置已禁用客户端支持的密码套件。
  3. 客户端上的TLS配置禁用服务器提供的密码套件。
  4. 客户端和服务器之间的TLS版本不兼容。

这导致TLS中的握手失败,并且连接失败。 检查上述三种情况中的一种或全部。