学习过程的错误记录,javax.net.ssl.SSLException解决

本文探讨了在Java应用程序中遇到的SSL连接异常问题,特别是`javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify`。解决方案是在数据库配置文件中添加`useSSL=false`来规避SSL验证。此外,还提到了在使用Maven编译项目时遇到的源码和目标版本不兼容问题,解决方法是在pom.xml中指定更高的JDK版本进行编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer’s close_notify

STACKTRACE:

javax.net.ssl.SSLException: closing inbound before receiving peer’s close_notify
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at

只需要在数据库配置文件中添加上&useSSL=false即可入图片描述
若在使用Maven编译项目时报错:
不再支持源选项 5。请使用 6 或更高版本。
不再支持目标选项 1.5。请使用 1.6 或更高版本。
直接在pom.xml中添加上maven编译的jdk版本

在这里插入图片描述

### MinIO 中出现 `javax.net.ssl.SSLException: Unsupported or unrecognized SSL message` 的解决方案 此问题通常发生在客户端尝试通过 HTTPS 连接到 MinIO 服务端时,但实际连接却是基于 HTTP 或者存在协议不匹配的情况。以下是详细的分析和解决办法: #### 错误原因 1. **HTTP 和 HTTPS 不一致** 如果 MinIO 配置为使用 HTTPS (secure=true),但在客户端请求中提供了 HTTP URL,则会触发该错误[^1]。 2. **SSL/TLS 版本不兼容** 客户端与服务器之间的 SSL/TLS 协议版本可能不同步。例如,如果客户端强制使用较新的 TLS 版本(如 TLS 1.3),而 MinIO 只支持旧版(TLS 1.0/1.1/1.2),则可能导致握手失败[^3]。 3. **证书验证失败** 当 MinIO 使用自签名证书或不受信任的 CA 签发的证书时,可能会引发类似的 SSL 握手异常[^2]。 --- #### 解决方案 ##### 方法一:调整 Secure 参数 在创建 MinIO Client 对象时,需明确指定 `secure` 参数来控制是否启用加密传输。对于本地开发环境或者测试场景下未开启 HTTPS 的情况,可以将 `secure` 设置为 `false`: ```java // 创建 MinIO 客户端实例 MinioClient minioClient = MinioClient.builder() .endpoint("http://172.0.0.1:9000") // 自定义 IP 地址 .credentials("your-access-key", "your-secret-key") .build(); ``` 注意此处 endpoint 前缀应为 `http://` 而非 `https://` 并且设置 `secure=false`[^4]。 ##### 方法二:升级 JDK 和 MinIO SDK 确保所使用的 Java Development Kit (JDK) 支持最新的 TLS 加密标准,并更新到最新稳定版本。同时确认引入的 MinIO 库也是当前官方推荐的高版本号以获得更好的安全性保障以及 bugfixes. POM 文件中的依赖项如下所示: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.6</version> <!-- 推荐使用最新版本 --> </dependency> ``` ##### 方法三:处理自签证书问题 如果是生产环境中部署了带有自签名证书的服务器,则需要让应用程序接受这些特定类型的凭证而不抛出异常。可以通过加载 keystore 来实现这一点: ```java import java.io.FileInputStream; import java.security.KeyStore; public class CustomTrustManager { public static void main(String[] args) throws Exception { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream("/path/to/truststore")) { trustStore.load(fis, "password".toCharArray()); // 替换密码为你自己的 } System.setProperty("javax.net.ssl.trustStore", "/path/to/truststore"); System.setProperty("javax.net.ssl.trustStorePassword", "password"); // 初始化 MinIO 客户端... } } ``` 上述代码片段展示了如何导入一个包含受信根CA条目的keystore文件路径及其相应密码。 --- ### 总结 针对 `javax.net.ssl.SSLException: Unsupported or unrecognized SSL message` 的根本原因是由于网络层面上的安全通信机制未能正常工作引起。具体表现为URL模式冲突、底层库版本差异或是认证链路缺失等问题所致。按照以上三种方式逐一排查即可有效解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值