草庐IT

Java http 客户端和 POODLE

coder 2023-08-28 原文

关于 POODLE 漏洞,如果我理解正确的话,它需要一个客户端在无法与使用服务器通告的更高版本协议(protocol)的服务器建立安全通道时自动将 TLS 协议(protocol)降级为 SSLv3。

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

我正在寻找类似 http://blog.hagander.net/archives/222-A-few-short-notes-about-PostgreSQL-and-POODLE.html 的内容但对于 Java 客户端。

最佳答案

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


更新: 默认情况下,HttpClient 4.3 总是使用 TLS,因此,除非明确配置它使用 SSLv3 HttpClient 应该不容易受到基于 POODLE 的攻击。

事实证明这是错误的。一个必须从支持的协议(protocol)列表中明确删除 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)。

关于Java http 客户端和 POODLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26429751/

有关Java http 客户端和 POODLE的更多相关文章

  1. ruby - 在 TCPServer (Ruby) 中,我如何从客户端获取 IP/MAC? - 2

    我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!

  2. ruby-on-rails - 为什么我必须在使用客户验证器后重新加载 rspec 中的记录? - 2

    我有一个模型User,它在创建后的回调中创建了选项#Userhas_one:user_optionsafter_create:create_optionsprivatedefcreate_optionsUserOptions.create(user:self)end我对此有一些简单的Rspec覆盖:describe"newuser"doit"createsuser_optionsaftertheuseriscreated"douser=create(:user)user.user_options.shouldbe_kind_of(UserOptions)endend一切正常,直到我将自

  3. ruby - 如何获得带有 SSL 客户端证书的 HTTPS 请求以与 Ruby EventMachine 一起使用? - 2

    我正在尝试使用RubyEventMachine访问使用SSL证书身份验证的HTTPSWeb服务,但我没有让它工作。我编写了以下简单代码块来对其进行端到端测试:require'rubygems'require'em-http'EventMachine.rundourl='https://foobar.com/'ssl_opts={:private_key_file=>'/tmp/private.key',:cert_chain_file=>'/tmp/ca.pem',:verify_peer=>false}http=EventMachine::HttpRequest.new(url).g

  4. ruby-on-rails - 在 Ruby on Rails 应用程序中使用客户端 SSL - 2

    我正在为需要与API建立SSL连接的客户端开发应用程序。我得到了三个文件;一个信任根证书(.cer)文件、一个中间证书(.cer)文件和一个签名的响应文件。我得到的安装说明与IIS或Javakeytool程序有关;我正在用RubyonRails构建应用程序,所以这两种方法都不是一个选项(据我所知)。证书由运行API服务的组织自签名,看来我获得了客户端证书以相互验证https连接。我不确定如何使用我的应用程序中的证书连接和使用API签名响应文件的作用我读过"Usingaself-signedcertificate"和thisarticleonOpenSSLinRuby但两者似乎都不是很到

  5. ruby - 为什么这个启用 SSL 的 Ruby 服务器/客户端测试有效? - 2

    我正在努力在Ruby中创建启用SSL的服务器,以及与服务器一起使用的相应Ruby客户端。为了进行测试,我使用以下命令创建了自己的根CA证书。$:~/devel/ssl-test/ssl/CA$opensslgenrsa-outTestCA.key2048GeneratingRSAprivatekey,2048bitlongmodulus............+++...........................+++eis65537(0x10001)$:~/devel/ssl-test/ssl/CA$opensslreq-new-keyTestCA.key-outTestCA.

  6. ruby-on-rails - 在处理电子邮件回复时,我怎样才能忽略任何电子邮件客户端细节和历史记录? - 2

    我有一个通过IMAP处理传入电子邮件的Rails应用程序。当前使用一种方法来搜索TMail对象的各个部分以查找给定的content_type:defself.search_parts_for_content_type(parts,content_type='text/html')parts.eachdo|part|ifpart.content_type==content_typereturnpart.bodyelseifpart.multipart?ifbody=self.search_parts_for_content_type(part.parts,content_type)ret

  7. ruby-on-rails - Ruby on Rails & Prawn PDF - 创建客户名单 - 2

    我正在尝试使用Prawn生成PDF报告,我可以通过传递单个ID轻松地让它对表演Action进行报告,但我想生成一个包含其中每条记录的报告。就像一个标准的railsscaffold索引页面。使用rails它看起来像这样:简单!但我不确定如何用Prawn做到这一点..类似于:defindex@customer=Customer.allrespond_todo|format|format.htmlPrawn::Document.generate("customer_list.pdf")do|pdf|pdf.text"#{@customer.id}"pdf.text"#{@customer.n

  8. ruby - 具有 HTTPS、SSL 客户端证书和 Keep-Alive 支持的 Ruby HTTP 库? - 2

    我正在尝试用Ruby编写一个HTTPS客户端。它将使用HTTPS连接到服务器,传递身份验证token(通过单独的登录过程获得)和SSL客户端证书。我正在使用rest-client执行以下操作:client=RestClient::Resource.new(url,:ssl_client_cert=>OpenSSL::X509::Certificate.new(File.read('./certificate/client-2048.pem')),:ssl_client_key=>OpenSSL::PKey::RSA.new(File.read('./certificate/client

  9. ruby-on-rails - 如何在 Ruby 中创建 Web 套接字客户端? - 2

    我需要从我的Rails应用程序向websocket服务器发送一些数据。意思是,我制作了一个Rails网络服务,当进行某些API调用时,我需要将一些数据发布到网络套接字服务器。是否有任何预建库可以在Rails中轻松创建Web套接字客户端? 最佳答案 Ruby客户端和服务器:https://github.com/igrigorik/em-websocket还有:https://github.com/mplatov/ruby-websocket-client 关于ruby-on-rails-如

  10. ruby - 如何让 ruby​​ 的 xmlrpc 客户端忽略 SSL 证书错误? - 2

    在ruby​​中使用xmlrpc/client访问XML-RPC服务时,如果服务器证书无效,它会抛出OpenSSL::SSL::SSLError。我怎样才能让它忽略这个错误并继续连接? 最佳答案 原来是这样的:xmlrpc=::XMLRPC::Client.new("foohost")xmlrpc.instance_variable_get(:@http).instance_variable_set(:@verify_mode,OpenSSL::SSL::VERIFY_NONE)这适用于ruby​​1.9.2,但显然是在探究内部结构

随机推荐