【问题标题】:SSL connection with specific protocol version具有特定协议版本的 SSL 连接
【发布时间】:2014-01-23 12:37:47
【问题描述】:

我正在尝试使用以下 JAVA 代码执行特定协议版本的 SSL 连接:

    System.out.println("Locating socket factory for SSL...");
    SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
    System.out.println("Creating secure socket to " + https_url + ":443");
    SSLSocket sslSocket = (SSLSocket)sslsocketfactory.createSocket();
    String []protocol = {"SSLv2Hello"};
    sslSocket.setEnabledProtocols(protocol);
    SocketAddress addr = new InetSocketAddress(https_url,443);
    sslSocket.connect(addr);
    String [] P = sslSocket.getEnabledProtocols();
    System.out.println("Enabled Protocol: " + Arrays.toString(P));

运行代码时,出现以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: SSLv2Hello cannot be enabled unless at least one other supported version is also enabled. at sun.security.ssl.ProtocolList.(Unknown Source) at sun.security.ssl.ProtocolList.(Unknown Source) at sun.security.ssl.SSLSocketImpl.setEnabledProtocols(Unknown Source) at CheckByURL.test(CheckByURL.java:36) at CheckByURL.main(CheckByURL.java:15)

当我尝试使用其他 SSL 版本时,它运行良好。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: java ssl


    【解决方案1】:

    Oracle Java 不支持 SSLv2。对于某些需要它的古老网站,它仅支持 SSLv2Hello 消息与更高级别的协议结合。因此,您收到的错误消息。 SSLv2Hello 是一个伪协议,它只是告诉 Java 以 SSLv2Hello 消息而不是 SSLv3 或 TLS Hello 消息开始。

    我相信 IBM 的 JRE 支持 SSLv2。

    但是,几乎可以肯定,您尝试连接的服务器也支持 SSLv3、TLS 等(如果不支持,则应升级,或因不安全而脱机)。因此,只需不理会启用的密码套件,您就应该能够连接到 Oracle JRE。

    【讨论】:

      【解决方案2】:

      如需解答,最好参考https://www.rfc-editor.org/rfc/rfc6176

      简而言之,SSL V2 在服务器端已停止使用,但最初的 SSL V2 客户端请求可能会被接受,但协商不应该以 V2 为基础。

      【讨论】:

      • 我尝试连接的服务器使用 SSL v2。当我使用 SSL 实验室进行 SSL 测试时,服务器似乎支持 SSL v2。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 2017-05-06
      • 1970-01-01
      相关资源
      最近更新 更多