线程 6,RECV TLSv1 警报:致命,握手失败

2024-02-27

这段代码有什么问题,它应该信任所有主机,但事实并非如此。

例如,它可以在 google.com 上正常运行,但不能在我的计算机上本地运行的 API 网关服务上运行,为什么?

SSL 调试输出

触发 SecureRandom 的播种 完成播种 SecureRandom 忽略 不支持的密码套件:TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 ... 忽略不支持的密码套件:TLS_RSA_WITH_AES_128_CBC_SHA256 允许不安全的重新协商: false 允许旧版 hello 消息: true 是 初始握手: true 是否安全重新协商: false Thread-6, setSoTimeout(0) 调用 %% 没有缓存的客户端会话 *** ClientHello,TLSv1 RandomCookie:GMT:1434280256 字节 = { 216 ... 40 } 会话 ID:{} 密码套件: [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, .... SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA、SSL_RSA_WITH_RC4_128_MD5、 TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 压缩方法:{ 0 } 扩展 elliptic_curves,曲线名称:{secp256r1 .. secp256k1} 扩展 ec_point_formats,格式:[未压缩]

线程 6,写入:TLSv1 握手,长度 = 163 线程 6,读取:TLSv1 警报,长度 = 2 线程 6,RECV TLSv1 警报:致命, handshake_failure Thread-6,调用 closeSocket() Thread-6,处理 异常:javax.net.ssl.SSLHandshakeException:**

收到致命警报:handshake_failure


**

import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;

public class ConnectHttps {
  public static void main(String[] args) throws Exception {
    /*
     *  fix for
     *    Exception in thread "main" javax.net.ssl.SSLHandshakeException:
     *       sun.security.validator.ValidatorException:
     *           PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
     *               unable to find valid certification path to requested target
     */
    TrustManager[] trustAllCerts = [
        [ getAcceptedIssuers: { -> null },
          checkClientTrusted: { X509Certificate[] certs, String authType -> },
          checkServerTrusted: { X509Certificate[] certs, String authType -> } ] as X509TrustManager
    ]

    SSLContext sc = SSLContext.getInstance("SSL");
    sc.init(null, trustAllCerts, new java.security.SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

    // Create all-trusting host name verifier
    HostnameVerifier allHostsValid = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
          return true;
        }
    };
    // Install the all-trusting host verifier
    HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
    /*
     * end of the fix
     */

    //URL url = new URL("https://google.com"); //WORKS
    URL url = new URL("https://localhost:8090");   // DOES NOT WORK, WHY?
    URLConnection con = url.openConnection();
    Reader reader = new InputStreamReader(con.getInputStream());
    while (true) {
      int ch = reader.read();
      if (ch==-1) {
        break;
      }
      System.out.print((char)ch);
    }
  }
}

Running 代码在这里找到 https://bugs.launchpad.net/ubuntu/+source/openjdk-7/+bug/1314113它表明客户端未启用 TLSv1.2:

支持的协议:5
SSLv2Hello
SSLv3
TLSv1
TLSv1.1
TLSv1.2

启用的协议:2
SSLv3
TLSv1


..它应该信任所有主机,但事实并非如此..

.. RECV TLSv1 警报:致命,握手失败线程 6

来自服务器的握手失败警报与客户端上服务器证书的验证无关,因此不能通过禁用证书验证来停止。很多事情都会导致这样的失败,比如没有通用的密码、不支持的协议版本、缺少 SNI 扩展(仅从 JDK7 开始支持)。由于错误是由服务器发出的,您可能会在服务器日志消息中找到有关该问题的更多详细信息。

编辑:从服务器日志中可以看出问题的原因:

错误处理连接:SSL 协议错误错误:1408A0C1:SSL 例程:SSL3_GET_CLIENT_HELLO:无共享密码

这意味着客户端和服务器之间没有通用密码。

造成这种情况的典型原因是服务器上的证书设置错误。如果您不配置任何证书,服务器可能需要使用 ADH 密码进行匿名身份验证,这通常在客户端未启用。建议您检查一下浏览器是否可以连接。

另一种常见的错误配置是禁用服务器上的所有 SSLv3 密码,因为我们认为这是禁用 SSL3.0 协议所必需的(但事实并非如此)。这实际上会禁用除 TLS 1.2 引入的一些新密码之外的所有密码。现代浏览器仍然能够连接,但旧客户端则无法连接。在这种情况下可以看到这种错误配置(来自评论):

从服务器日志,接口密码:FIPS:!SSLv3:!aNULL,

!SSLv3禁用 SSL3.0 版本可用的所有密码及更高。这实际上只留下了 TLS1.2 密码,因为没有新的 TLS1.0 和 TLS1.1 密码。由于客户端似乎只支持 TLS1.0,因此不会有共享密码:

...写入:TLSv1 握手

Use of !SSLv3密码中的问题通常是由于缺乏对协议版本和密码之间差异的理解而引起的。要禁用 SSLv3,您应该只相应地设置协议,而不是密码。

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

线程 6,RECV TLSv1 警报:致命,握手失败 的相关文章

随机推荐

  • Cakephp 导入控制器

    我是 cakephp 的新手 我想在我的控制器中导入控制器 所以我使用以下语法 这是我导入用户控制器的控制器 用户控制器 php function api work data this gt User gt find all this gt
  • 半角和全角字符的用途是什么?

    半角字符和全角字符的用途是什么 它们之间有什么区别 我很好奇是因为验证器 js https github com chriso validator js 一个开源字符串验证库 有几个函数可以评估form http en wikipedia
  • Pandas 用组值填充 NA [重复]

    这个问题在这里已经有答案了 给定以下数据框 import pandas as pd import numpy as np df pd DataFrame Site A A A B B B C C C Value np nan 1 np na
  • Magento 2 Rest Api 在产品更新时过于频繁地清除缓存

    我们对 Magento 2 的 Api 存在一个问题 涉及全页缓存以及来自 ERP 系统的其余 API 的更新 ERP 不断通过 API 推送库存 库存和产品更新 进而刷新每次产品更新的缓存 从而形成始终不缓存的网站 我们尝试包装 Flus
  • 以编程方式下载视频android的第一帧

    我想从我的 Android 应用程序的服务器下载视频文件的单帧 我不想下载前面的完整视频 使用该帧作为缩略图向用户显示 以便用户选择后可以下载 ffmpeg可以使用以下命令从视频流创建缩略图 ffmpeg itsoffset 4 i htt
  • MPI中如何获取物理机的数量

    我可以用MPI Comm size获取处理器总数 但是如何获取真实物理机的数量呢 If by 物理机你的意思是一组处理元素 共享公共内存地址空间 然后是 MPI 3 按类型分割操作MPI COMM SPLIT TYPE可用于便携式获取此类机
  • PHP和2多维数组基于两个键值进行比较

    我有两个像这样的多维数组 original Array 0 gt Array time gt 1364690340 memberid gt 90 type gt single 1 gt Array time gt 1364690341 me
  • 在不使用 CAP_FIRST 的情况下将列中多个单词的首字母大写

    我有一张如下表 Name firstname lastname FirstName Lastname firstName Lastname FirstName lastname 我正在尝试将每个字母大写firstname and lastn
  • 如何使用 Zend DB 执行 MySQL IN 子句?

    我正在尝试使用 Zend Framework 1 11 获取整数数组中的行 this gt dbSelect gt from table prefix product link gt joinLeft table prefix produc
  • Qt如何连接rubberBandChanged信号

    我尝试将 QChartView 类中的 ruby BandChanged 信号链接到 MainWindow 类中的特定函数 主窗口 h class MainWindow public QMainWindow Q OBJECT public
  • Python paramiko 线程安全吗?

    我想在并行执行某些命令时轮询系统状态 例如内存负载或 CPU 负载 我可以在多个 Python 线程中使用一个 Paramiko 客户端还是必须连接多个 Paramiko 客户端 我找不到任何有关 Paramiko 线程安全的文档 感谢您的
  • System.getProperty("os.arch") 在 M1 Mac 上的价值?

    有什么价值System getProperty os arch 返回运行的 Apple Silicon M1 Macaarch64JDK 的端口 例如Liberica https bell sw com端口 即not使用罗塞塔2 基于thi
  • 从已知点对照片进行白平衡

    白平衡是一个相当广泛的主题 但我看到的大多数答案都涵盖了整个图像的自动白平衡技术 该技术没有已知的白色 灰色和黑色点 我似乎找不到很多从已知点涵盖白平衡的内容 我有一个脚本 如下 它拍摄色卡 Spyder Checkr 48 的图像并返回白
  • 从 GitHub 上的 Pull Request 中删除文件

    我已经在 git 上发出了 Pull 请求 使用 xcodeproj project pbxproj 文件 我的错 那么我可以从创建的 Pull 请求中删除这个文件吗 谢谢 您可能会在 master 上合并这个拉取请求 这样你就可以从mas
  • 捕获 R 输出并替换为 LaTeX 代码

    我正在尝试捕获一些 R 代码的输出并将其替换为乳胶代码 如果您运行此代码 library stargazer x lt capture output stargazer mtcars 1 5 1 3 summary FALSE title
  • 如何获取弹性搜索中嵌套对象的数组计数

    有人可以帮助我获取弹性搜索中嵌套对象的聚合计数 假设我的弹性搜索对象映射为 employe dynamic strict properties empId type keyword entities type nested 实体是带有其他对
  • 防止文本表突出显示

    我有一个表 我允许用户 选择 多行 这一切都是使用 jQuery 事件和一些 CSS 来处理的 以直观地指示该行已被 选择 当用户按下 Shift 键时 可以选择多行 有时这会导致文本突出显示 有什么办法可以防止这种情况发生吗 CSS3 有
  • 什么是静态嵌套类? [复制]

    这个问题在这里已经有答案了 可能的重复 Java 静态内部类与非静态内部类 https stackoverflow com questions 1353309 java static vs non static inner class 什么
  • OS X 上的 Pthread 和 gcc 编译问题

    我有一个脚本可以在 Linux Ubuntu 11 04 上编译良好 但不能在 OS X Lion 上编译 gcc pthread o hw1 hw1 c hw1 c 22 error expected asm or attribute b
  • 线程 6,RECV TLSv1 警报:致命,握手失败

    这段代码有什么问题 它应该信任所有主机 但事实并非如此 例如 它可以在 google com 上正常运行 但不能在我的计算机上本地运行的 API 网关服务上运行 为什么 SSL 调试输出 触发 SecureRandom 的播种 完成播种 S