当前位置: 首页 > 面试题库 >

Java http客户端和POODLE

胡天佑
2023-03-14
问题内容

关于POODLE漏洞,如果我理解正确,则它要求客户端在无法使用服务器发布的更高版本协议与服务器建立安全通道时,会自动将TLS协议降级为SSLv3。

当无法与服务器建立TLS会话时,常见的Java HTTP客户端库,特别是javax.net.ssl.HttpsURLConnection和Apache
HttpClient是否会自动降级TLS协议?如果不是,我是否可以纠正它们不受POODLE攻击的影响,除非(a)服务器仅支持SSLv3,或者(b)较高级别的逻辑执行降级?

我正在寻找类似http://blog.hagander.net/archives/222-A-few-short-notes-about-
PostgreSQL-and-POODLE.html之类的
东西,但适用于Java客户端。


问题答案:

Apache HttpClient没有实现任何TLS协议方面。它依靠JSSE API进行TLS /
SSL握手并建立安全的SSL会话。除了SSL主机名验证逻辑外,就TLS / SSL而言,Apache
HttpClient与其在其中运行的JRE一样安全(或易受攻击)。

更新: 默认情况下,HttpClient 4.3始终使用TLS,因此,除非明确将其配置为使用SSLv3,否则HttpClient 应该
不容易受到基于POODLE的攻击

事实证明这是错误的。一个 必须 从支持的协议列表中明确删除SSLv3!

SSLContext sslContext = SSLContexts.custom()
        .useTLS() // Only this turned out to be not enough
        .build();
SSLConnectionSocketFactory sf = new SSLConnectionSocketFactory(
        sslContext,
        new String[] {"TLSv1", "TLSv1.1", "TLSv1.2"},
        null,
        SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient client = HttpClients.custom()
        .setSSLSocketFactory(sf)
        .build();

更新2: 从版本4.3.6开始,HttpClient默认禁用所有版本的SSL(包括SSLv3)。



 类似资料:
  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 我想知道以下问题的答案: 1)如果Ignite服务器重新启动,我需要重新启动客户端(web应用程序)。是否有任何方法可以在服务器重新启动时重新连接到服务器。我知道当服务器重新启动时,它分配了一个不同的ID,因此当前现有的连接变得过时。是否有方法克服这个问题,如果是的话,哪一个版本的Ignite支持这个功能。目前我使用1.7版本 3)如果我有一个大对象要缓存,我发现序列化和反序列化在Ignite中需

  • 问题内容: 我正在用Java编写一个简单的客户端,以允许可重用​​通过RESTful API访问的专有病毒扫描软件。要上传文件以扫描API,需要先使用Connect(连接),然后再要求将文件发布到服务器。在对Connect的响应中,服务器设置了cookie,随后将需要cookie 来发布文件。我当前在客户端中使用Spring 。 我的问题是我如何访问响应中的cookie,以便随后将其转发回服务器?

  • 后端 这是来自领域设置

  • 我使用。NET Core2.0和ASP.NET Core2.0进行应用程序开发。“测试”应用程序是一个。NET核心控制台应用程序。我正在编写的核心代码是一个类库。一旦适当的测试。我选择这样做是因为我暂时不会使用它(它正在替换旧的ASPNET代码)。 无论如何,由于我必须处理各种服务的大量API密钥,所以我决定使用Microsoft Azure Key Vault来存储密钥。我有这一切设置,并理解这

  • URI 方法 URI() string 返回当前客户端使用的服务器地址。 SetURI 方法 SetURI(uri string) 设置当前客户端使用的服务器地址。如果你想要设置多个服务器地址,请使用 SetURIList 方法代替该方法。 URIList 方法 URIList() []string 返回当前客户端可使用的服务器地址列表。 SetURIList 方法 SetURIList(uriL