gpt4 book ai didi

java - HTTP 客户端 SSL 连接 setEnabledCipherSuites

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:27 25 4
gpt4 key购买 nike

我有一个通过 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,以便我可以在握手之前设置密码套件?

提前致谢。

最佳答案

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

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 - HTTP 客户端 SSL 连接 setEnabledCipherSuites,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com