深入解析Java 7中javax.net.ssl.SSLHandshakeException的TLS协议兼容性问题

如何在java7中启用TLSv1.2 在jdk1.7环境下使用HTTPclient爬虫一个https网站的时候,出现如下错误: 阅读详情

1. 从一次真实的“握手失败”说起

那天下午,我正在调试一个老旧的Java 7系统,它需要调用一个外部合作伙伴的API。代码很简单,就是最经典的 HttpsURLConnection 去发起一个GET请求。然而,控制台毫不留情地抛出了一堆红字:

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
...
Caused by: SSL peer shut down incorrectly

相信很多还在维护Java 7甚至更老系统的朋友,对这个异常信息再熟悉不过了。它就像一个神秘的“暗号”,告诉你连接建立失败了,但具体为什么失败,却说得云里雾里。我当时的第一反应是:“证书有问题?” 检查了信任库,没问题。“网络不通?” Ping了一下,通着呢。这就很让人头疼了。

后来,我打开了SSL握手调试日志(加上 -Djavax.net.debug=ssl:handshake 这个JVM参数),真相才浮出水面。在日志里,我清晰地看到我的客户端(Java 7)热情地伸出手说:“嗨,咱们用TLS 1.0来安全地聊天吧!” 而对面的服务器却高冷地回复了一句:“我只跟TLS 1.1或1.2的朋友玩。” 然后,啪的一声,连接就被服务器直接关闭了。这就是“握手失败”的本质:协议版本没谈拢。

这个场景在今天越来越普遍。随着网络安全标准的提升,很多现代的Web服务器、云服务API(比如一些新的支付网关、云存储服务)都已经默认禁用甚至不再支持老旧的TLS 1.0协议了,转而强制要求使用更安全的TLS 1.2或更高版本。而我们的Java 7应用,如果还保持着出厂设置,就会在这场“初次见面”的问候语上栽跟头。所以,这个问题不是你的代码逻辑错了,而是你的“安全方言”版本太旧,对方听不懂,也不想听。

2. 深入TLS协议:为什么Java 7会“语言不通”

要彻底搞懂这个问题,我们得稍微深入一点,看看TLS(传输层安全协议)和Java 7到底是怎么回事。你可以把TLS想象成一套不断升级的“加密通话规则”。

TLS 1.0 诞生于1999年,基于更早的SSL 3.0,算是现代安全通信的奠基者。TLS 1.1(2006年)和 TLS 1.2(2008年)则是重要的安全升级版,修复了前代的一些漏洞,增加了更强的加密算法。到了 TLS 1.3(2018年),变化就更大了,速度更快、更安全。

那么,Java 7在这个时间线上处于什么位置呢?Java 7的初始版本发布于2011年。在那个年代,TLS 1.2虽然已经诞生,但还未像今天这样成为绝对主流。因此,Sun(现在是Oracle)的JSSE(Java安全套接字扩展)实现,在Java 7的默认配置里,启用的协议列表是 SSLv3, TLSv1。这意味着,当你创建一个 SSLSocket 或使用 HttpsURLConnection 时,如果没有特别指定,它会优先尝试用TLS 1.0去和服务器握手。

这里有个关键点需要澄清:Java 7的JSSE实现,是具备支持TLS 1.1和TLS 1.2的能力的,尤其是在Java 7的后期更新版本中(比如Java 7 Update 95之后)。问题不在于“能不能”,而在于“默认用不用”。这就像你的手机支持5G网络,但默认设置可能为了省电而优先连接4G。服务器那边呢,现在普遍的做法是只开启TLS 1.2(或1.1+1.2),明确关闭了TLS 1.0。两边的默认列表对不上,握手自然失败。

所以,SSLHandshakeException: Remote host closed connection during handshake 这个异常,本质上是一个协议兼容性问题。它不是证书验证失败(那种通常会抛出 CertificateException),也不是主机名不匹配,纯粹是双方在协商第一步——“用什么版本的规则交流”——时就谈崩了,服务器出于安全策略,直接终止了连接。

3. 解决方案一:全局开关,修改JVM默认协议列表

这是最简单、最直接的方法,尤其适合你对整个应用有控制权,并且希望一劳永逸地解决所有HTTPS连接问题。思路就是改变JVM的默认行为,告诉它:“以后出门握手,别只说TLS 1.0了,把这些新版本也带上。”

3.1 通过启动参数设置

最推荐的方式是在启动你的Java应用时,通过 -D 参数设置系统属性。这样设置是全局生效的,所有基于JSSE的HTTPS连接都会遵循这个新规则。

java -Dhttps.protocols=TLSv1.1,TLSv1.2 -jar your-application.jar

这个 https.protocols 系统属性,就是专门用来指导 HttpsURLConnection 这个类在建立连接时使用的协议列表。你可以把它理解为一个“协议白名单”。顺序很重要,客户端会按你列出的顺序依次尝试。这里我建议把TLSv1.2放前面,因为它是目前最安全、最通用的。

实测经验:在我遇到的那个案例里,加上这个参数后,原本报错的应用立刻就能正常获取到API数据了,效果立竿见影。这也是很多运维同学在部署Java 7老应用时,会在启动脚本里添加的标配参数之一。

3.2 在代码运行时动态设置

如果你无法控制应用的启动命令(比如应用部署在一个受控的容器中),也可以在代码的早期初始化阶段(比如在 main 方法开头,或Servlet的 init 方法里)动态设置这个属性。

public class MyAppInitializer {
    public static void main(String[] args) {
        // 在创建任何HTTPS连接之前设置
        System.setProperty("https.protocols", "TLSv1.1,TLSv1.2");
        // ... 你的其他启动逻辑
    }
}

需要注意的是,System.setProperty 的设置是JVM进程级别的,一旦设置,其他部分的代码也会受到影响。所以要确保尽早设置,并且清楚这可能会改变应用内其他库的行为(如果它们也依赖 HttpsURLConnection)。

3.3 一个更现代的替代参数:jdk.tls.client.protocols

在Java 7的较新版本以及Java 8中,引入了一个更细粒度的参数:jdk.tls.client.protocols。它专门用于控制客户端侧的TLS协议,影响范围比 https.protocols 更广,涵盖了所有使用JSSE客户端功能的场景(比如 SSLSocketFactory 创建的socket),而不仅仅是 HttpsURLConnection。

java -Djdk.tls.client.protocols=TLSv1.2,TLSv1.1 -jar your-app.jar

如果你的环境允许,我建议同时设置这两个参数,兼容性最好:

java -Dhttps.protocols=TLSv1.2,TLSv1.1 -Djdk.tls.client.protocols=TLSv1.2,TLSv1.1 -jar your-app.jar

踩过的坑:有一次我只设置了 https.protocols,但应用里某个第三方库自己通过 SSLSocketFactory 创建了连接,结果还是失败了。后来加上 jdk.tls.client.protocols 才彻底解决。所以,如果你不确定应用内部用了哪种方式,双管齐下最保险。

4. 解决方案二:精准控制,构造自定义的SSLContext

通过JVM参数修改是全局性的,有时我们可能需要更精细的控制。比如,你的应用需要连接两个不同的服务器:一个老旧的内部系统只支持TLS 1.0,而一个新的外部服务要求TLS 1.2。全局设置TLS 1.2可能会导致连不上内部系统。这时候,我们就需要为不同的连接创建不同的“安全上下文”,也就是 SSLContext。

SSLContext 是JSSE的核心类,它定义了安全通信的所有规则:使用什么协议、用什么加密算法套件、证书从哪里来等等。通过编程方式创建它,你可以获得完全的控制权。

4.1 为特定连接指定TLS版本

下面这段代码展示了如何创建一个只使用TLS 1.2的 SSLContext,并将其应用于一个特定的 HttpsURLConnection:

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import java.net.URL;

public class Tls12SpecificConnection {
    public static void main(String[] args) throws Exception {
        // 1. 创建指定TLS版本的SSLContext
        // 参数可以是 "TLSv1.2", "TLSv1.1", "TLS"
        // 注意:传入 "TLS" 会使用上下文提供者支持的最高版本,在Java 7下可能回退到TLSv1
        SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        
        // 2. 初始化SSLContext(使用默认的密钥和信任管理器)
        // 第一个参数是密钥管理器,第二个是信任管理器,第三个是随机数源
        // 这里传null表示使用系统默认的
        sslContext.init(null, null, null);
        
        // 3. 从SSLContext获取SSLSocketFactory
        SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
        
        // 4. 打开HTTPS连接
        URL url = new URL("https://api.secure-example.com/data");
        HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
        
        // 5. 将自定义的SocketFactory设置给这个连接
        connection.setSSLSocketFactory(sslSocketFactory);
        
        // 现在,这个连接将强制使用TLSv1.2进行握手
        // ... 进行connect、getInputStream等操作
    }
}

这种方法的好处是隔离性。只有使用了这个自定义 sslSocketFactory 的连接才会遵循TLS 1.2规则,应用内其他HTTPS连接不受影响,依然使用JVM的默认设置。

4.2 处理更复杂的情况:协议列表与算法套件

有时候,仅仅指定一个最高版本可能还不够。某些服务器配置比较严格,可能同时禁用了某些老旧的加密算法。我们可以通过 SSLSocket 进行更底层的设置。

// 假设我们已经有了一个SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, null, null);

// 创建Socket
SSLSocketFactory factory = sslContext.getSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket("secure-server.com", 443);

// 设置客户端启用的协议列表(优先级高于默认)
String[] enabledProtocols = {"TLSv1.2", "TLSv1.1"};
socket.setEnabledProtocols(enabledProtocols);

// 甚至可以设置启用的加密套件列表,以排除不安全的算法
String[] enabledCipherSuites = {
    "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
    "TLS_RSA_WITH_AES_128_CBC_SHA"
    // ... 只添加你信任的、安全的套件
};
socket.setEnabledCipherSuites(enabledCipherSuites);

// 然后使用这个socket进行IO操作

这种方式的控制力最强,但也最复杂。你需要对TLS加密套件有一定了解。通常,在解决了协议版本问题后,加密套件问题相对少见,除非遇到极其严格的安全策略。

5. 诊断与调试:让你的应用“说出”握手细节

当问题第一次出现时,盲猜是很难的。我们必须让Java把握手过程详细地记录下来。这就是 -Djavax.net.debug 参数的威力。它就像给SSL/TLS引擎装了一个“黑匣子”或者调试麦克风。

5.1 使用调试参数

你可以在启动命令中加入不同详细程度的调试信息:

  • 最详细(信息量巨大):-Djavax.net.debug=all
  • 专注于SSL握手过程(推荐):-Djavax.net.debug=ssl:handshake
  • 更精简的握手信息:-Djavax.net.debug=ssl:handshake:verbose

我通常先用 ssl:handshake 级别。当你的应用再次抛出 SSLHandshakeException 时,控制台会输出一大堆日志。你需要关注类似这样的关键行:

*** ClientHello, TLSv1.2
...
*** ServerHello, TLSv1
...
main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT:  fatal, handshake_failure
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

在这个例子中,客户端明明说“我想用TLSv1.2”(ClientHello),但服务器回复说“我只用TLSv1”(ServerHello),这显然不是我们想要的。我们期望看到的是服务器也回复 TLSv1.2。如果服务器回复的版本低,或者直接发送了一个 handshake_failure 警报然后关闭连接,那基本就是协议或加密套件不匹配。

5.2 解读调试信息与常见模式

通过调试日志,你可以准确判断问题根源:

  1. “协议版本不支持”模式:客户端问候(ClientHello)列出 TLSv1,服务器直接关闭连接或返回错误警报。这说明服务器已禁用TLS 1.0。
  2. “加密套件不匹配”模式:协议版本协商成功,但在后续的“ServerHello”消息中,服务器从客户端提供的加密套件列表里选了一个,或者因为找不到可用的套件而失败。这可能需要你像4.2节那样调整 enabledCipherSuites。
  3. 证书问题:如果握手在交换证书阶段失败,日志里会有 Certificate 相关的条目和验证错误,这通常是另一个话题(信任库配置)。

养成在遇到SSL问题时首先开启调试日志的习惯,能节省大量无谓的排查时间。它直接把对话过程摆在你面前,比任何猜测都管用。

6. 超越Java 7:升级的考量与兼容性实践

虽然我们花了很大篇幅讨论如何在Java 7里解决这个问题,但从长远来看,最好的解决方案是升级JDK版本。Java 8在2014年发布,其默认的客户端协议列表已经包含了TLS 1.2。而Java 11及更高版本,则默认禁用了SSLv3甚至TLS 1.0/1.1,更加安全。

如果你的项目暂时无法升级整个运行环境,可以考虑以下渐进式策略:

策略一:在构建时使用高版本JDK编译,指定较低的目标字节码版本。 这样你可以利用新JDK的库和工具链,但生成的class文件仍能在Java 7上运行。不过,这解决不了运行时TLS协议的问题,因为JSSE的实现是随JRE走的。

策略二:使用第三方HTTP客户端库。 一些库如Apache HttpClient、OkHttp等,它们自己封装了SSL连接逻辑,可能对老版本Java有更好的兼容性处理,或者更容易配置协议版本。但引入新库本身也有成本和依赖管理问题。

策略三:也是最务实的,将本文的解决方案作为标准部署规范。 在所有基于Java 7的部署脚本、Dockerfile、容器启动命令中,强制加入 -Dhttps.protocols=TLSv1.2,TLSv1.1 -Djdk.tls.client.protocols=TLSv1.2,TLSv1.1 参数。同时,在代码中对所有指向外部现代服务的连接,显式使用自定义的TLS 1.2 SSLContext。这相当于给老旧的系统打上了一个安全补丁,让它能在现代网络环境中继续工作。

在我经历的项目中,正是通过这种“全局参数+关键连接精准控制”的组合拳,让一个核心的Java 7系统又平稳运行了两年,为完整的系统迁移赢得了宝贵时间。技术债总是要还的,但在还清之前,我们需要一些可靠的工具来确保它不会突然倒塌。理解 SSLHandshakeException 背后的TLS协议兼容性问题,并掌握这些解决方案,就是这样一个关键的工具。

【Java报错已解决】javax.net.ssl.SSLHandshakeException: SSL 💝💝💝很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝✨✨ 欢迎订阅本专栏 ✨✨。 阅读详情

相关推荐

【Java实战指南】全面解析javax.net.ssl.SSLHandshakeException:从诊断到修复

本文全面解析Java中常见的javax.net.ssl.SSLHandshakeException异常,从诊断到修复提供详细指南。涵盖SSL握手失败的原因分析、五种诊断工具的使用方法,以及六种常见场景的解决方案,帮助开发者快速解决Java应用中的SSL/TLS连接问题。

weixin_29217235的博客 401

告别SSL握手失败:用快马AI平台快速诊断javax.net.ssl.SSLHandshakeException

SSL/TLS握手问题看似复杂,但通过系统化的排查方法,大多数情况下都能找到解决方案。从最简单的配置开始测试,逐步增加复杂度善用详细的调试日志,它能提供最直接的故障信息对于生产环境,一定要使用有效的证书和安全的协议版本考虑使用专业的SSL测试工具(如openssl s_client)进行交叉验证如果你也经常遇到SSL相关问题,不妨试试在InsCode(快马)平台上快速构建自己的诊断工具。从我的经验来看,这种可视化的测试方式比单纯看日志要高效得多。

SunstoneLion34的博客 878

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException

使用的是okhttp,https请求报异常: Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorS

yzpbright的博客 9234

AI如何自动解决SSL协议错误:以javax.net.ssl.SSLHandshakeException为例

对于更灵活的控制,我们可以创建自定义的SSLContext对象。这种方法适用于需要细粒度控制SSL/TLS参数的场景,比如需要支持特定的密码套件或证书验证逻辑。

SilvermistRaven28的博客 1000

Java 7的javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake异常分析

Java7通过httpsURLConnection建立HTTPS连接,异常如下: javax.net.ssl.SSLHandshakeException: Caused by: Remote host closed connection during handshake Caused by: SSL peer shut down incorrectly 解决方案似乎是明显的,客户端需要提高版本...

成长的足迹 7231

开发经验(四):javax.net.ssl.SSLHandshakeException No appropriate protocol异常排查

文章目录一、案发现场二、知识扫盲三、实施抢救 一、案发现场 项目升级了Java8后,原来Java6运行的程序,报出这个错误,相面得知,是SSL的请求不行了。不支持当前的协议了。 二、知识扫盲 SSL:安全套接层,英语解释Secure Sockets Layer; TLS:是SSL的升级协议,是网景公司(Netscape)退出的新的浏览器协议;包括1.0, 1.1、 1.2、1.3、新的版本,1.3版本是基于修复攻击者利用虚假的错误信息,将安全连接降级到过时且不安全的SSL3.0标准,然后利用漏洞进行窃取

出家二少 2517

【Java】已解决:javax.net.ssl.SSLHandshakeException: SSL

是一种在SSL/TLS握手过程中发生的异常,通常在客户端和服务器之间建立安全连接时出现。如果在这个过程中出现任何问题,例如证书无效或不被信任、协议版本不匹配等,就会导致SSL握手失败,从而抛出。在Java开发过程中,SSL(Secure Sockets Layer)握手异常是一个常见的网络通信错误,特别是在使用HTTPS协议进行安全通信时。如果服务器的SSL证书不被客户端信任,或证书存在问题,运行上述代码时就会抛出。这一异常的背景、可能的原因,并通过代码示例帮助您理解和解决这一问题。,并且连接将无法建立。

屿小夏.的知识博客 2925

jmeter小白下载安装步骤

本文仅仅简单介绍了jmeter工具的下载安装,以及基础的操作步骤。

昔年@曦的博客 3497

Java调用ssl出现异常:javax.net.ssl.SSLHandshakeException: No appropriate protocol

在Java8及高版本以上的版本在调用ssl时会出现javax.net.ssl.SSLHandshakeException: No appropriate protocol的异常。 javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) at sun.security.ssl.HandshakeContext.<init&

嘉禾笔记 1万+

自定义LayoutManager实现android-pile-layout滑动卡片堆叠效果

这是我的第一篇博客,总算有个契机开始写博客了,就从自定义LayoutManager开始吧。 前段时间看到一个项目(android-pile-layout),效果特别不错,这是效果图: 效果确实不错,我看了下实现,是用的自定义的ViewGroup实现的,计算什么还搞的挺复杂的,具体的没细看。作者说也尝试过用LayoutManager实现,但是没找到合适的数学模型,好吧,看到数学模型我

u014296305的博客 1万+

2025年度工业级3D全景相机技术解析选型参考:国产品牌的技术突围与市场格局

本文分析了工业级3D相机在智慧城市和建筑数字化中的应用。通过对比国内外主流设备的技术参数和应用场景,发现国产品牌如众趣科技在性价比和本地化服务方面具有优势,尤其适合大型空间扫描项目;而国际品牌如Faro、Leica则在精度和可靠性上保持领先。建议根据项目需求(如测距范围、精度要求、预算)进行设备选型,综合考虑扫描效率、数据处理能力和系统兼容性。国产品牌已在国内大型基建项目中展现出竞争力,国际品牌则更适合高精度逆向工程和国际化项目。

gxdtgsy的博客 1075

已解决javax.net.ssl.SSLHandshakeException: SSL握手异常的正确解决方法,亲测有效!!!

已解决javax.net.ssl.SSLHandshakeException: SSL握手异常的正确解决方法,亲测有效!!!

小明的Java问道之路 3万+

ComfyUI全自动换装工作流:从零到一的实战指南

本文提供了一份详细的ComfyUI全自动换装工作流实战指南。从环境配置、模型准备到核心工作流架构的逐步拆解,手把手教你搭建一条高效的AI换装流水线。文章深入解析了从输入、预处理、融合到输出的四步核心逻辑,并分享了关键参数调优与进阶技巧,旨在帮助电商从业者、内容创作者及AI爱好者轻松实现高质量、高效率的“一键换装”。

weixin_29198045的博客 901

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

臭名昭著的Java异常javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure很难被凡人理解。它最想说的是这样的: 抱歉,JVM和服务器均不接受任何加密协议/版本和密码套件。 例如,服务器需要的TLS版本高于(旧)JVM支持的TLS版本,或者它需要比JVM知道的更强的密码套件。现在,您将学习如何...

hhcccchh的专栏 5647

【论文泛读|附源码】如何进行动力学重构? 神经网络自动编码器结合SINDy发现数据背后蕴含的方程

这一篇文章叫做 **数据驱动**的**坐标发现与方程发现算法**。想回答的问题很简单,就是根据数据写方程。 想想牛顿的处境,如何根据各种不同物体下落的数据,写出万有引力的数学公式的。这篇文章就是来做这件事的。当然,这篇论文并没有从牛顿视角,完全去思考牛顿所想。而是利用现有的**深度学习技术** 和 **动力学重构的方法** 。提出了一种框架,基于现有的计算机技术,去发现物质运动背后的物理规律。 这里直接给出这篇方法的核心思路图,我们后面会逐个讲解。

qq5q13638的博客 2459

Android SystemUI——初始化流程(三)

1、Android 系统在启动之后,首先会Zygote进程,Zygote进程又会进一步启动 SystemServer进程,它会启动各种系统所需要的服务,在监听AMS启动完毕之后,还会启动SystemUIService。2、在启动SystemUIService服务之前,系统首先会创建SystemUI对应的进程,获取SystemUIAppComponentFactory实例对象,调用instantiateApplicationCompat创建SystemUIApplication实例对象并设置回调方法。

小旭的专栏 1159

解决报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol

解决报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

weixin_52116015的博客 5087

机器人轨迹规划——梯形速度轨迹(超详细)

机器人轨迹 这一系列轨迹教程将主要包括以下内容: 点到点轨迹(P2P) 五次多项式插值轨迹 三次多项式插值轨迹 梯形速度曲线轨迹 双S形速度曲线轨迹 多个自由度轨迹的时间同步 在线轨迹规划 多项式在线轨迹规划 梯形在线轨迹规划 双S形在线轨迹规划 非线性实时轨迹滤波 多点轨迹(Multi-point) 三次样条曲线(cubic spline) 贝赛尔曲线(Bezier Curve) B样条曲线(BSpline) 时间最优轨迹 三次样条时间最优轨迹 任意路径下的时间最优轨迹 时间

出门搔白首,若负平生志 1万+

已解决javax.net.ssl.SSLHandshakeException: SSL握手异常的解决方法,亲测有效,嘿嘿嘿!!!

`javax.net.ssl.SSLHandshakeException: SSL握手异常` 通常表示在尝试建立安全套接字连接(SSL/TLS 握手)时出现了问题。这个问题可能由多种原因引起,包括但不限于证书问题、协议不匹配、加密算法不支持等。以下是对这个异常的分析、报错原因、解决思路、解决方法以及代码示例。 ### 问题分析 SSL握手是建立安全通信的过程,它涉及到客户端和服务器之间的多个步骤,包括证书交换、加密算法协商等。如果在这个过程中任何一个步骤出现问题,都可能导致SSL握手失败,并抛出`SSL

PythonAigc的博客 8989

【异常】XXL-job触发调度:address:http://192.168.x.x:x/ code:500 msg:xxl-rpc remoting error(connect timed out)

XXL-JOB调度任务失败分析:调度中心(10.254.234.80)与执行器(192.168.x.x)连接超时,返回500错误。主要原因是网络不通或执行器异常:1.网络不通可能由防火墙或网段隔离导致;2.执行器未启动或端口未监听;3.地址配置错误。解决方案:1.关闭代理使用内网;2.测试网络连通性和端口可用性;3.检查执行器进程状态和端口监听情况;4.核对执行器地址配置;5.必要时配置防火墙规则放行端口。

奶爸的编程之路,也就一周冷个三天 414

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

深入解析javax.net.ssl.SSLHandshakeException:PKIX路径验证失败的排查与修复指南

本文深入解析Java开发中常见的javax.net.ssl.SSLHandshakeException异常,特别是PKIX路径验证失败的成因与解决方案。通过真实案例,详细拆解证书链验证、签名有效性和证书有效期检查等核心环节,并提供使用OpenSSL诊断、修复证书链、导入信任库等从临时绕过到彻底解决的全方位实战指南,帮助开发者构建健壮的SSL/TLS连接。

o9p0q1的博客 676

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

javax.net.ssl.SSLHandshakeException No appropriate protocol报错解决方案

javax.net.ssl.SSLHandshakeException: No appropriate protocol报错解决 文章目录javax.net.ssl.SSLHandshakeException: No appropriate protocol报错解决一、问题描述二、问题解决方案一方案二(亲测有效)1.2. 一、问题描述 用java开发了一个简单的***发送邮件***的程序,本地运行正常,但是上传到服务器就出现报错: Exception in thread "main" javax.mail.

時々雨 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WGCLOUD监控sqlserver报错javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10

可以找到配置项:jdk.tls.disabledAlgorithms(jdk不生效的算法配置)里面有TLSv1, 也就是说 TSL1.0版本不让用了,这样就解释了为啥会出现问题。3. 如果嫌麻烦可以直接把 java.security 文件删了,问题可以解决,但是会不会出现其他问题就不得而知了,慎重使用。打开文件:JAVA_HOME\jre\lib\security\java.security,搜索关键词jdk.tls。2. 把 jdk.tls.disabledAlgorithms 配置项注释掉或者删掉。

xiaoshuaideboke的博客 4431

SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常

一.SSL/TLS的Handshake过程 在SSL/TLS的Handshake过程中,客户端与服务器之间需要交换参数,具体过程如下: 客户端提供其所支持的各种cipher suites(包含加密算法和Hash函数) 服务器从中选择自己也支持的cipher suite,并通知客户端,表明两者将以此进行数据传输 服务器同时将自己的数字证书(包括服务器名称、CA和公钥)作为标识符发给客户端 ...

成长的足迹 5万+

对于javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure错误某一情况的处理

从异常信息里面看出,协议没问题,证书签名处挂了!加密,我们客户端也要加上相印的加密套件才行。(把下面代码加在上面示例中相应位置即可)然后对比到底是哪部分出现错误;(请看一段简单网络请求代码)出现的异常:(部分展示)

xqdad_的博客 3604
上一篇: GORM实战:如何根据主键策略选择.Save()与.Create()
下一篇: Uniapp与后端联调必看:当遇到FormData传参要求时该怎么办?
python9snake
博客等级 码龄1天 0粉丝 1724原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值