当前位置: 首页 > 知识库问答 >
问题:

使用Apache HTTP客户端时如何设置EnabledCipherSuite?

暴阳州
2023-03-14

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

共有2个答案

卞安邦
2023-03-14

获取客户端的推荐方法是使用客户端生成器。在此构建器中,您可以设置 Http 客户端连接管理器,而该管理器又可以采用注册表

示例代码:

Registry<ConnectionSocketFactory> socketFactoryRegistry;
    {
        SSLContext sslcontext = <your SSLContext>;
        socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
            .register("http", new PlainConnectionSocketFactory())
            .register("https", new SSLConnectionSocketFactory(sslcontext,
                                    <your supported protocols, could be null>,
                                    <your supported ciphers, could be null>,
                                    <your HostnameVerifier>
            .build();
    }

HttpClientBuilder b = HttpClientBuilder.create()
    .setConnectionManager(new BasicHttpClientConnectionManager(socketFactoryRegistry))
    .set<anything else you want>(<with what you want>);

HttpClient client = b.build();

易宣
2023-03-14

我正面临着同样的问题,我能够解决这个问题。

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/file中的java“java.security”文件,并从禁用算法列表中删除CR4。

 类似资料:
  • 我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。 对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较? 我可以比较一下它们的性能、连接池、它们

  • 在我做了插座之后。多房间聊天应用程序的IO服务器如何使用https://github.com/socketio/socket.io-client-java ? 我搜索了很多,在socket的客户端还没有找到最新的例子。对于android,大多数教程和示例都是针对带有节点的服务器端的。js。

  • 问题内容: 因此,已经有一个必须在控制台上运行的Python程序设置了。我将使用Javascript为应用程序构建Web GUI界面。我将如何: 一种。开始处理此Python程序的输入/输出,而无需触摸原始代码。 b。通过Javascript调用将控制台输入发送到Python程序。我已经研究了原始的HTTP请求/ AJAX,但不确定如何将其作为输入发送到Python程序。 问题答案: 一种。处理程

  • 自定义成菜单 说明: 1)启用该功能后,直播客户端可以通过自定义菜单的方式加载用户自定义的网页,方便结合自身业务进行交互操作(客户端5.0.0以上版本支持) 问卷设置 说明: 1)在直播管理页面点击 “问卷设置”,启用该功能后,直播客户端可以通过接口请求的方式将用户问卷库中的问卷导入到客户端中使用 2)关于问卷设置的具体功能及使用方法,请参考:问卷接口开发指南 菜单设置 说明: 1)支持对客户端的

  • 我们能以编程方式获取HTTPClientPolicy对象吗?或者我们必须在传递给template.send()的Camel URI中引用它,例如:

  • 问题内容: 我有几个关于客户端节点的Elasticsearch问题: 我可以说:任何节点只要打开HTTP端口,我都可以将它们视为“客户端”节点,因为我们可以通过该节点进行搜索/索引。 实际上,当和时,我们将节点视为客户端节点,如果我设置了10个客户端节点,是否需要在客户端进行路由,这意味着如果我在代码 中将clientOne:9200 指定为ES门户,则 clientOne会 转发其他HTTP请求