由于我需要使用一些遗留服务器,并且 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/