服务器关闭使用 httpclient 和 Java 7 建立的连接

2023-12-14

我正在尝试连接到使用 SNI 提供证书的远程服务器。我注意到服务器正在关闭使用 Java 7 编译和运行代码时建立的连接,而不是通过 Java 8 编译和运行代码时建立的连接。

下面是我为测试这个假设而编写的代码。我切换 Java 版本并运行代码并得到不同的结果。

public static void getRequest() throws IOException, NoSuchAlgorithmException, KeyManagementException {
    String url = "https://sorry i can not share the exact url because of privacy concerns";

    HttpClient client = getClientInstance();
    HttpGet request = new HttpGet(url);

    HttpResponse response = client.execute(request);

    System.out.println("Response Code : "
            + response.getStatusLine().getStatusCode());

    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

    StringBuffer result = new StringBuffer();
    String line = "";
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }
    System.out.println("####### the result is");
    System.out.println(result.toString());
}

private static org.apache.http.client.HttpClient getClientInstance() throws KeyManagementException, NoSuchAlgorithmException {
    RequestConfig defaultRequestConfig = RequestConfig.copy(RequestConfig.DEFAULT)
            .setConnectTimeout(60 * 1000)
            .setSocketTimeout(60 * 1000)
            .setConnectionRequestTimeout(60 * 1000)
            .build();

    return HttpClientBuilder.create().setDefaultRequestConfig(defaultRequestConfig).build();
}

有人遇到过这样的问题并解决了吗?我知道最终的解决方案是使用 Java 8,但这不是我在当前时间限制内可以完成的任务,因为我正在调试的整个代码库很大,并且具有可能无法与 Java 7 很好地配合的依赖项。

抛出的异常如下;

*** ClientHello, TLSv1
RandomCookie:  GMT: 1472095425 bytes = { 254, 51, 194, 246, 77, 6, 185, 8, 224, 187, 85, 225, 133, 128, 122, 1, 245, 13, 230, 239, 156, 93, 164, 184, 251, 159, 111, 60 }
Session ID:  {}
Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
Compression Methods:  { 0 }
Extension elliptic_curves, curve names: {secp256r1, sect163k1, sect163r2, secp192r1, secp224r1, sect233k1, sect233r1, sect283k1, sect283r1, secp384r1, sect409k1, sect409r1, secp521r1, sect571k1, sect571r1, secp160k1, secp160r1, secp160r2, sect163r1, secp192k1, sect193r1, sect193r2, secp224k1, sect239k1, secp256k1}
Extension ec_point_formats, formats: [uncompressed]
Extension server_name, server_name: [host_name: lasclev.org]
***
main, WRITE: TLSv1 Handshake, length = 169
main, handling exception: java.net.SocketException: Connection reset
main, SEND TLSv1 ALERT:  fatal, description = unexpected_message
main, WRITE: TLSv1 Alert, length = 2
main, Exception sending alert: java.net.SocketException: Broken pipe
main, called closeSocket()
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
    at sun.security.ssl.InputRecord.read(InputRecord.java:480)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)

Also below is a screenshot of the SSL Labs test that i carried out earlier. SSL Labs test fragment


您没有显示 SSLLabs 报告中列出支持的协议的部分,但我打赌您会发现该服务器仅支持 TLSv1.2,或者可能支持 TLSv1.2 和 TLSv1.1,但不支持 TLSv1.0。特别是,处理受 PCI DSS 约束的支付交易的系统通常被禁止使用 TLSv1.0(又名“早期 TLS”),这显然是由于对 BEAST 的过度反应(尽管不值得,但在 NVD 中仍为 4.3)。虽然在这种情况下服务器should给出警报 70 或者 71 或 40,而不仅仅是重置(或关闭)。默认情况下,Java7 (JSSE) 客户端不执行 TLSv1.2 或 TLSv1.1。

这可能取决于 HttpClient 的版本 - 我有 4.5 - 但我认为你可以:

  • 创建一个适当配置的SSLConnectionSocketFactory and .setSSLSocketFactory到它,或者

  • .useSystemProperties(true)并设置 sysprophttps.protocols视情况而定TLSv1.2 or TLSv1.1,TLSv1.2(也被使用javax.net.HttpsURLConnection),但这可能会影响您不想要的其他事情(请参阅 javadocuseSystemProperties)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务器关闭使用 httpclient 和 Java 7 建立的连接 的相关文章

  • 如何使用 Java 以独立于平台的方式读取 Windows 共享驱动器?

    如何使用 Java 从 Windows 共享驱动器中读取数据 以便执行读取的 Java 代码可以在任何平台上同样正确地运行 您可以使用JCIFS http jcifs samba org 使用纯 Java 代码访问 SMB CIFS 共享
  • JAVA_HOME环境变量和Java JDK趣事

    我想让 Java 在 1 6xxx 上运行 我更改了 JAVA HOME 变量并将其指向目录 C Program Files Java jdk1 6 0 16 我重新启动 PC 我想我可以检查我的机器指向哪个版本的 Java 但它仍然指向旧
  • 方法重载。你能过度使用它吗?

    当定义多个使用不同过滤器返回相同形状的数据的方法时 什么是更好的做法 显式方法名称或重载方法 例如 如果我有一些产品并且我正在从数据库中提取 显式方式 public List
  • 如何将 Cucumber 中的数据表转换为对象列表?

    原标题 Java 中的 Cucumber DataTables 中的标量是什么意思 From 参考 Java 提供了几种标量类型 这些包括原始数字 类型 加上布尔值和字符 每个标量 原始 类型都有一个关联的包装类或 参考类型 阅读javad
  • LibGDX 闪烁

    我已经使用 LibGDX UI 设置来启动一个项目 我在实现 ApplicationListener 中唯一拥有的是 public void create setScreen new LoadingScreen this 这应该会触发 Lo
  • docker 中带有参数的 jar 文件

    Helo 我有一个 java jar 文件 当我从终端运行它时 它会接受一堆参数作为输入 我想制作一个 docker 映像并运行它 其中包含 jar 文件 我仍然可以在其中传递 jar 文件的参数 将 jar 文件设置为您的入口点 http
  • Logback 配置在单行上有异常吗?

    我的日志被提取 传输并合并到 elasticsearch 中 多行事件很难跟踪和诊断 有没有办法使用收集器和正则表达式将异常行分组到单个记录中登录配置 https logback qos ch manual layouts html xTh
  • 使用 Jboss7 加载资源返回 null

    如何使用Jboss7 1从java代码中加载图像等资源 这曾经与 Jboss4 一起使用 this getClass getClassLoader getResourceAsStream myapp includes images imag
  • Spring portlet mvc:@Valid 似乎不起作用

    我创建了一个 bean 类并在我的控制器中使用它 但它似乎不起作用 也就是说 即使我输入了无效的年龄 result hasErrors仍然是假的 豆类 public class User Min 13 private int age pri
  • Java如何区分这些具有相同名称/签名的多个方法?

    今天我在追踪一个错误 我注意到我们的一个班级中有一些奇怪的事情 我删除了尽可能多的代码并发布在这里 class A static int obtainNumber return 42 static int obtainNumber retu
  • 如何将 .txt 文件的最后 5 行读入 java

    我有一个包含多个条目的文本文件 例如 hello there my name is JoeBloggs 我如何按降序阅读最后五个条目 即来自 JoeBloggs 那里 我目前有代码只能读取最后一行 public class TestLast
  • jsch - 发送特殊键(CTRL-C、CTRL-D 等)

    我需要向远程终端发送特殊密钥 如何使用 JSCH 做到这一点 Thanks Walter 尝试发送两个字节 0x03 0x04 Check ASCII 表 http www bbdsoft com ascii html了解更多
  • 如何在 iText 7 中创建页面大小不等的文档

    如何在 iText 7 中创建页面大小不等的文档 iText7 可以吗 在iText5中 我使用document setPageSize and document newPage 如果您通过高级 API 添加内容 Document add
  • 在Java中,为什么某些变量首先需要初始化,而其他变量只需要声明?

    我试图更深入地理解我是否遗漏了一些关于 Java 何时需要变量初始化与简单声明的理解 在以下代码中 不需要为变量 row 赋值即可编译和运行 但变量 column 则需要赋值 注意 该程序没有任何用处 它已被修剪为仅显示此问题所需的内容 以
  • 我的代码线程不安全吗?

    我编写了代码来理解 CyclicBarrier 我的应用程序模拟选举 每轮选出得票少的候选人 该候选人从竞争中淘汰以获得胜利 source class ElectoralCommission public volatile boolean
  • 使用 System.out.println 显示特殊字符

    我在将带有特殊字符的文本从网络服务发送或显示到数据库时遇到问题 在我的 Eclipse 上 我已将字符编码设置为 UTF 8 但它仍然不允许我显示字符 例如 像下面的代码一样简单的打印 String test System out prin
  • 无法取消 GWT 中的重复计时器

    我正在尝试在 GWT 中安排一个重复计时器 它将每一毫秒运行一次 轮询某个事件 如果发现满意 则执行某些操作并取消计时器 我尝试这样做 final Timer t new Timer public void run if condition
  • 仅当用户开始输入时清除 JavaFX TextField 中的提示文本

    默认行为是当字段获得焦点时 字段中的提示文本将被删除 那是标记在场上的时候 是否可以配置文本字段 以便仅在用户开始输入时删除提示文本 否则 我需要在每个文本字段旁边 上方添加一个标签 以描述其中的值 我知道它有点旧 但我自己也需要它 这仍然
  • 最新版本 6.* Struts2 支持 Tomcat 10 吗? [复制]

    这个问题在这里已经有答案了 最新版本 6 Struts2 支持 Tomcat 10 吗 异常启动过滤器 struts2 java lang ClassCastException class org apache struts2 dispat
  • Java GridBagConstraints gridx 和 gridy 不工作?

    我正在尝试使用gridx and gridy定位我的按钮的约束 但它们不起作用 如果我改变gridx and gridy变量 什么也没有发生 如果我将填充更改为GridBagConstraints to NONE 仍然不行 我在这里错过了什

随机推荐

  • 从 XML 生成 C# 类

    我可以从 XML 文件生成 C 类吗 如果您正在 VS 2012 或更高版本 中处理 NET 4 5 项目 您可以特殊浆料您的 XML 文件作为类 将 XML 文件的内容复制到剪贴板 在编辑器中 选择要粘贴类的位置 从菜单中选择EDIT g
  • 在 bash 脚本中运行 PostgreSQL CLI (psql) 时没有密码提示?

    以用户 postgres 身份通过 bash 脚本运行 PostgreSQL CLI psql 会导致发送密码提示 即使我可以在没有密码的情况下手动运行它 当我尝试在脚本中添加 w 时 出现此错误 psql fe sendauth 未提供密
  • DEP0600 部署 UWP 项目时出错

    Visual Studio 社区 2015 更新 3 在部署带有蓝屏的 UWP 项目时崩溃 意外的存储异常 以前发生过这种情况 后 我无法再部署任何项目 我尝试使用 VS 崩溃的项目 该项目的先前版本以及完全空的新项目 错误信息如下 DEP
  • Matlab-将连续数据转换为离散数据

    是否有任何技术可用于将连续数据转换为离散数据 我所说的连续数据是指各种函数生成的输出值 例如 为不同数据点集的熵生成的值 如果是这样 Mathworks File Exchange 的 Matlab 中是否有可用的实现 更准确的答案是您需要
  • 自定义 Android 应用程序屏幕图像,在应用程序屏幕之间切换时可见

    我想知道当我的应用程序处于后台模式时 如何将我的应用程序的图像自定义为主屏幕图像 即当用户在最近的应用程序选项中的应用程序之间导航时 所有正在运行的应用程序的小屏幕截图都可见 Eg Image Attached for more clari
  • ios 和 android 上的字体大小不同

    在 Android 上的 Web 视图中 我加载一个包含 HTML5 画布的 html 文件 将文本写入画布时 它非常小 如果我在 PC 浏览器甚至 IOS 上的 Web 视图中加载相同的 html 文件 它看起来是正确的 据我所知 我已经
  • git 中的上游/主题/集成之间的合并方向是否有重要意义?

    我已阅读使用git打包软件直到我的眼睛酸痛为止 正如我所看到的这个图片 建议从上游 gt 主题分支 gt 本地集成分支进行合并 我对上游分支和本地集成分支之间存在冲突的场景特别感兴趣 如果我完全正确地阅读了这篇文章 它说如果我合并上游 gt
  • 产生给定总和和乘积的子数组

    给定一个长度为N的数组 如何找到最小长度 其和为 S 其乘积为 P 的连续子数组 例如5 6 1 4 6 2 9 7 for S 17 Ans 6 2 9 for P 24 Ans 4 6 从左到右 将所有数字相加 如果总和 gt S 则丢
  • 我可以在我的 wpf 应用程序中嵌入 ICE 并与其交互触发事件吗

    我可以将 ICE 嵌入到我的 wpf 应用程序中并与其触发事件进行交互吗 例如我可以通过编程方式填写表格并按提交按钮吗 下面是 WPF Web 浏览器控件的链接 该控件不是 WPF 初始版本的一部分 是在 3 5 SP1 中添加的 只要您的
  • 如何在 SQL Server 中自动更新相关视图?

    我们公司的某人决定使用 3 个视图来支持网页 并且它们必须包含相同的列子集 所以我有这样的定义 CREATE VIEW EmailReceivedView AS SELECT dbo EmailReceived ID lots of col
  • andengine中的自定义ScrollView

    我怎样才能定制ScrollView这会移动所有的侧面 我如何找到我点击 ScrollView 的位置andengine 提前致谢 我编写了一个小的 ShapeScrollContainer java 类 该类正在开发中 但功能齐全 欢迎您使
  • 创建将子对象嵌套在猫鼬中的对象父对象

    我想创建 1 个对象嵌套文档 例如 孩子们 chil1 name Mimi parent 537258f63eb92b3201b65e56
  • React-router导入路由

    我想改变这一点
  • 在c中清除输入缓冲区的替代方法

    有没有其他方法可以在不使用c的情况下清除输入缓冲区 fflush or while getchar n 因为我到处都读过它 但找不到任何其他方法来做到这一点 最好的解决方案是不要太依赖输入缓冲区的状态 使用整行读取输入fgets 然后解析它
  • 步数进度条ExtJs

    How I can implement a step progress bar in ExtJs like this 您可以在帮助下创建步骤进度条dataview 并编写简单的接口来使您的组件与此同步dataview Fiddle
  • AWS Cognito 登录 (Android)

    我正在尝试弄清楚如何使用 AWS Cognito 登录用户 这教程所有这些似乎都是从注册用户的角度来处理用户的 而不是让他们登录 我不希望用户经历注册过程 这将由我们的办公室用户在其他地方完成 我只想在这个应用程序中提供一个流程 让他们输入
  • 将矩阵保存到文件时如何控制格式?

    我将矩阵保存到如下文件中 save filepath mtrx ascii 有没有办法告诉MATLAB写0代替0 0000000e 000价值观 这会很好 因为可以更快 更容易地看出哪些值不同于零 我建议使用DLMWRITE代替SAVE因为
  • 我如何在 iOS 中读取 ptr_refs 给出的引用?

    打印参考文献列表时ptr refs 它给出了一些模糊的结果 至少在 iOS 中 例如 我有一个带有这个小应用程序的示例应用程序ViewController类和恰好一个对 a 的出口引用UILabel实例 import UIKit class
  • 如何解决 lambda 表达式外部变量问题?

    我正在使用 PropertyDescriptor 和 ICustomTypeDescriptor still 尝试将 WPF DataGrid 绑定到一个对象 该对象的数据存储在字典中 因为如果您向 WPF DataGrid 传递一个 Di
  • 服务器关闭使用 httpclient 和 Java 7 建立的连接

    我正在尝试连接到使用 SNI 提供证书的远程服务器 我注意到服务器正在关闭使用 Java 7 编译和运行代码时建立的连接 而不是通过 Java 8 编译和运行代码时建立的连接 下面是我为测试这个假设而编写的代码 我切换 Java 版本并运行