
异常: EXCEPTION STACK TRACE:
** BEGIN NESTED EXCEPTION **
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.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:762) at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:741) at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1284) at com.mysql.cj.NativeSession.quit(NativeSession.java:182) at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1911) at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:730) at cn.com.he.codegen.template.DynamicJdbcTemplate.getPk(DynamicJdbcTemplate.java:288) at cn.com.he.codegen.service.impl.GeneratorServiceImpl.generatorCode(GeneratorServiceImpl.java:79) at cn.com.he.codegen.controller.GeneratorController.generatorCode(GeneratorController.java:51) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) Java 应用程序在连接 MySQL 数据库时遇到了 SSL 相关的警告和异常。以下是问题分析与解决方案:
Establishing SSL connection without server's identity verification is not recommended.
...
verifyServerCertificate property is set to 'false'.
You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.这是 MySQL JDBC 驱动(mysql-connector-java)在连接数据库时发出的安全警告。
原因:
useSSL=false 或配置 SSL 信任库(truststore),则会提示该警告。注意: 警告不是错误,但出于安全考虑建议处理。
javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify这个异常通常表示:
如果你不需要 SSL 加密(如测试/开发环境),可以在 JDBC URL 中添加参数:
jdbc:mysql://localhost:3306/dbname?useSSL=false⚠️ 注意:此方式不推荐用于生产环境。
ca.pem);keytool -import -alias mysqlServerCACert -file ca.pem -keystore truststore.jksjdbc:mysql://localhost:3306/dbname?useSSL=true&requireSSL=true&verifyServerCertificate=true&
clientCertificateKeyStoreUrl=file:/path/to/truststore.jks&
clientCertificateKeyStorePassword=yourpassword-Djavax.net.ssl.trustStore=/path/to/truststore.jks
-Djavax.net.ssl.trustStorePassword=yourpassword有时此类问题是由于旧版 JDBC 驱动或 JDK 不兼容引起的:
8.0.x);application.yml)spring:
datasource:
url: jdbc:mysql://localhost:3306/dbname?useSSL=false&serverTimezone=UTC
username: root
password: yourpassword
driver-class-name: com.mysql.cj.jdbc.Driver场景 | 建议做法 |
|---|---|
开发/测试环境 | 添加 useSSL=false 忽略 SSL |
生产环境 | 启用 SSL + 配置信任库 |
排查 SSL 异常 | 检查证书、驱动版本、JDK 版本 |