【问题标题】:HTTP Client SSL Connection setEnabledCipherSuitesHTTP 客户端 SSL 连接 setEnabledCipherSuites
【发布时间】:2015-11-22 12:00:11
【问题描述】:

我有一个通过 HTTPS 连接到服务器的应用程序。 有问题的服务器有一个使用 RC4 密码的弱证书(最近从 JDK https://www.java.com/en/download/faq/release_changes.xml 中删除了默认支持) 所以在升级 JDK 之后,我看到 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

发行说明指定您应该使用 SSLSocket/SSLEngine.setEnabledCipherSuites() 专门启用某些密码。

但是,使用 HttpsUrlConnection 或 Apache 的 CloseableHttpClient,我只能找到如何指定 SslSocketFactory。这似乎没有提供功能 .setEnabledCipherSuites。

找到这个帖子:Why does SSLSocketFactory lack setEnabledCipherSuites?

我的问题是: 有没有办法在出站客户端 HTTP 请求中获取 SSLEngine/Socket,以便我可以在握手之前设置密码套件?

提前致谢。

【问题讨论】:

  • 你有没有找到解决这个问题的方法?我也面临同样的问题。
  • 嗨,我也面临同样的问题。你找到解决办法了吗?

标签: java ssl httpurlconnection


【解决方案1】:

我遇到了同样的问题,我能够解决这个问题。

SecureProtocolSocketFactoryImpl protFactory = new SecureProtocolSocketFactoryImpl();
httpsClient.getHostConfiguration().setHost(host, port, httpsProtocol);

在“SecureProtocolSocketFactoryImpl”类中,您必须为 SecureProtocolSocketFactory 类重写方法 public Socket createSocket()。

在那个方法中你会得到一个这样的套接字

 SSLSocket soc = (SSLSocket) getSSLContext().getSocketFactory().createSocket(
                    socket,
                    host,
                    port,
                    autoClose
                );

因此,您将能够执行以下操作。

ciphersToBeEnabled[0] = "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA";
soc.setEnabledCipherSuites(ciphersToBeEnabled);

希望你能明白。如果您有任何问题,请在下面发表评论。请注意,仅这样做不会启用 RC4 相关密码。您需要修改 jre/lib/security/ 文件中的 java "java.security" 文件,并从禁用算法列表中删除 CR4。

【讨论】:

  • 能否告诉我如何修改 jre/lib/security/ 文件中的 java.security 并从禁用算法列表中删除 CR4?
【解决方案2】:

对于HttpsURLConnection,设置系统属性https.cipherSuites

【讨论】:

    【解决方案3】:

    正如你提到的 SSLSocketFactory 不支持 setEnabledCipherSuites() 所以可以做这样的事情

    SSLSocketFactory socketFactory=(SSLSocketFactory)SSLSocketFactory.getDefault();
    SSLSocket socket=(SSLSocket)socketFactory.createSocket(host,port);
    socket.setEnabledCipherSuites(CIPHERS);
    SSLSocket provides setEnablesCipherSuites();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 2023-04-10
      • 1970-01-01
      • 2012-08-25
      • 2011-01-15
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多