java - 使用 Apache HTTP Client 时如何设置 EnabledCipherSuites?

标签 java httpclient apache-httpclient-4.x apache-commons-httpclient

由于我需要使用一些遗留服务器,并且 RC4 已从 Java 8 中删除,因此我需要重新启用一些基于 RC4 的密码。如发行说明中所述,我们必须使用 SSLSocket/SSLEngine.setEnabledCipherSuites()。由于我使用的是 Apache HTTP 客户端,因此我无法找到执行此操作的方法。提前致谢! (我还发现了一个没有答案的半挂车问题,所以想发布一个新的)

最佳答案

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

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。

关于java - 使用 Apache HTTP Client 时如何设置 EnabledCipherSuites?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733249/

相关文章:

java - 如何防止 Java 中的 SocketInputStream.socketRead0 挂起?

java apache HC BasicHttpEntityEnclosingRequest 与 BasicHttpRequest

java - HttpClient POST 获取 html 页面的速度比浏览器慢约 2.5 倍

apache-httpclient-4.x - apache httpclient - 读取响应的最有效方式

Java - 使用 JScrollPane

java - 如何在 GlassFish 中设置部署描述符以便运行 servlet 来代替欢迎页面?

java - Minecraft Java 插件 - 方 block 位置相同,但仍然不起作用

Java swing 渲染优化

c# - 在 Powershell 中运行时与在 Visual Studio 中运行时的 HttpClient 并发行为不同

java - Apache Http 客户端打印 "[read] I/O error: Read timed out""