当前位置: 首页 > 知识库问答 >
问题:

SSLHandShakeException没有适当的协议

楚鸿波
2023-03-14
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的密钥存储库中,我甚至尝试用这段代码接受每一个证书(这违背了我所知道的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个答案

吕骞尧
2023-03-14

$jre/lib/security/java.security中:

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, RC4, DES, MD5withRSA, DH keySize < 1024, \
EC keySize < 224, 3DES_EDE_CBC, anon, NULL

这行是启用的,在我注释掉这行之后,一切都正常工作。很明显,在JRE1.8.0_181中,在/之后启用了这一行。

我的Java版本是“1.8.0_201”。

 类似资料:
  • 我曾尝试将java 11.0.9连接到MySQL 5.6连接器,但在服务器中出现以下错误,但在本地相同的代码中工作正常 引起:javax.net.ssl.SSLHandshakeException:没有适当的协议(协议被禁用或密码套件不合适)在java.base/sun.security.ssl.HandshakeContext.(未知源)在java.base/sun.security.ssl.C

  • 我试图用ssl证书加载一个web服务,它说是服务器启动,但当我试图使用这个web服务(通过SOAPUI)时,我得到了“SSLHandShakeException”,在eclipse上日志中我看到以下内容: SSLV2无可用密码套件Hello无可用密码套件SSLv3无可用密码套件TLSv1无可用密码套件TLSv1.1无可用密码套件TLSv1.2 qtp1589240253-57,致命错误:80:问题

  • 问题内容: 按照此处的说明进行操作,并重新创建了我以前错误创建的证书。就像我现在在服务器和客户端上看到的一样,情况发生了变化。 服务器是ClassFileServer.java,相应的客户端是SSLSocketClientWithClientAuth.java 有关使两端都能正常播放的任何提示,请注意,我使用的是localhost,因此我假设密码功能相同。 更新: 这是我用于生成文件的步骤,我可能

  • 问题内容: 我试图让Spring中的控制器按照3.0的建议使用Jackson类返回无济于事的JSON响应。我的课程路径中当然有杰克逊jar文件(jackson-core- asl-1.5.5.jar和jackson-mapper-asl-1.5.5.jar)。 至于appconfig.xml条目,我不确定是否需要这些。我将它们放在那里,作为最后的绝望之举,然后再回到ol’fashion non-j

  • 我知道这个话题还有其他一些问题(有答案)。但这些对我都没有帮助。 我有一个postfix服务器(debian 10上的postfix 3.4.14),配置如下(只有有趣的部分): 好的,首先我删除了中的扩展,因为这没有帮助而且是错误的(感谢dave_thompson_085的提示)。 下面是发送电子邮件的Java代码(代码有一个“很长”的历史,所以请不要奇怪为什么使用,而不是...) 为了调试,我