热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

与客户端证书的SSL重新协商会导致服务器缓冲区溢出

与客户端证书的SSL重新协商会

似乎Sun
Java内置的HttpsUrlConnection工具无法以服务器友好的方式(即没有溢出服务器SSL重新协商缓冲区)来处理带有客户端证书的大型HTTP
PUT。

我检查了curl所做的事情,以了解“服务器友好”的含义,结果发现有一个名为“ Expect”的HTTP 1.1标头,curl发送的值为“
100-continue”(请参阅​​规格http://www.w3 .org / Protocols / rfc2616 /
rfc2616-sec14.html#sec14.20)。该标头本质上说:“我有很大的负载,但是在发送之前,请告诉我是否可以处理”。这使端点有时间在发送有效负载之前重新协商客户端证书。

在SunHttpUrlConnection实现中,似乎不允许使用此标头,而实际上是在受限标头列表中。这意味着即使您使用HttpUrlConnection.setRequestProperty方法进行设置,标题也不会实际发送到服务器。您可以使用系统属性sun.net.http.allowRestrictedHeaders覆盖受限制的标头,但是由于Sun实现不知道如何处理协议的这一部分,因此客户端只会因套接字异常而崩溃。

有趣的是,似乎Java的OpenJDK实现确实支持此标头。另外,Apache HTTP
Client库支持此标头(http://hc.apache.org/);我已经用Apache
HTTP客户端库实现了一个测试程序,它可以使用客户端证书和Expect标头成功执行大文件的HTTP PUT请求。

概括地说,解决方案是:


  1. 将Apache SSLRenegBufferSize指令设置为一个很大的数字(例如64MB)。默认值为128K。此解决方案可能会导致拒绝服务风险

  2. 配置一台始终需要客户端证书的主机,而不是只需要几个目录的主机。这样可以避免重新谈判。在我的情况下,这不是一个好选择,因为大多数用户都是匿名的,或者已验证用户名/密码。只有一个上载目录用于程序上载文件。我们只需要为此一个目录创建一个具有自己的SSL证书的新虚拟主机。

  3. 使用支持HTTP 1.1 Expect标头的客户端。不幸的是,Sun Java不支持此功能。必须使用第三方(例如Apache HTTP Component Client库)或使用Java套接字API推出自己的解决方案。

  4. 通过最初发出没有大有效负载但导致重新协商的HTTP请求来利用HTTP 1.1持久连接(使用keep-alive进行流水线化),然后将连接重用于HTTP PUT。从理论上讲,客户端应该能够在上传目录上发出HTTP HEAD或OPTIONS,然后重用相同的连接来执行PUT。为了使它起作用,持久连接池可能只需要包含一个连接,以避免“启动”一个连接,然后为PUT发出另一个连接。但是,由于我一直无法使该解决方案正常工作,因此HttpUrlConnection类似乎不会保留/重用涉及客户端证书或SSL的持久连接。





推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
author-avatar
傲慢的小草7_170
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有