关于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)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句