网络上推荐的做法是配置useSSL=false
但是如果服务器配置了强行SSL连接呢,就会报这个错
Connections using insecure transport are prohibited while --require_secure_transport=ON.
所以只能配置

useSSL=true

但是紧接着又会报这个错
java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
这个时候网上推荐的做法是配置

verifyServerCertificate=false

这个配置的意义是无脑信任一切SSL证书,这肯定是不安全的
那么就需要信任证书了,这个时候需要做的就是信任证书啦
这时候网络上推荐的做法是往JDK导入证书

keytool -import -trustcacerts -v -alias Mysql -file "C:\ProgramData\MySQL\MySQL Server 8.0\Data\ca.pem" -keystore "C:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts"

这样做没问题,但不是完美的解决方案。
这样做,自己一个人开发,一点问题都没有。但是放到生产就问题大了。
现在的生产系统一般都是分布式,N台机器部署,每台机器都需要执行一次导入证书命令,N台机器就要执行N次命令。
如果数据库换个证书,那么所有的机器都要执行一次导入证书命令
mysql 的jdbc驱动提供了一个办法
将证书导入证书库

keytool -import -trustcacerts -v -alias Mysql -file "C:\ProgramData\MySQL\MySQL Server 8.0\Data\ca.pem" -keystore "mysql.ks"

然后将证书放http服务器上,或ftp服务器上
连接字符串里配置

trustCertificateKeyStoreUrl=http://localhost:8080/static/mysql.ks
trustCertificateKeyStorePassword=123456

最终的连接字符串为

jdbc:mysql://localhost:3306/shopxxb2b2c?useUnicode=true&useSSL=true&trustCertificateKeyStorePassword=123456&trustCertificateKeyStoreUrl=http://localhost:8080/static/mysql.ks&serverTimezone=Asia/Shanghai
                    网络上推荐的做法是配置useSSL=false但是如果服务器配置了强行SSL连接呢,就会报这个错Connections using insecure transport are prohibited while --require_secure_transport=ON.所以只能配置useSSL=true但是紧接着又会报这个错java.security.cert.Certificat...
				
WEB配置JDBC支持SSL Connector/J 可以使用 SSL 加密 JDBC 驱动程序和服务器之间通信的所有数据(初始握手除外)。启用连接加密会带来性能损失,其严重程度取决于多种因素,包括(但不限于)查询的大小、返回的数据量、服务器硬件、使用的 SSL 库、网络带宽、等等。 系统通过两个 Java 密钥库文件工作:一个文件包含服务器的证书信息(truststore在下面的示例中),另一个包含客户端的密钥和证书(keystore在下面的示例中)。所有 Java 密钥库文件都受到创建文件时提供给key
mysql连接依赖版本与数据库版本不匹配 在进行springboot+shiro整合,测试demo 在连接数据库时出现了问题,我在docker上安装的mysql数据库版本是5.8,而此demo中pom文件中依赖版本为5.1.43 mysql mysql-connector-java 连接失败,报错: 方法执行了认证逻辑。。。 2020-02-18 16:55:32.742 INFO 1304 --- [nio-8080-exec-3] com.alibaba.druid.pool.DruidDataSource : {data
mysqljdbc驱动提供了一个办法 将证书导入证书库,命令行启动 keytool -import -trustcacerts -v -alias Mysql -file “E:\ca.pem” -keystore “mysql.ks” 设置密码为 123456 然后将证书放java项目内 连接字符串里配置 trustCertificateKeyStoreUrl=classpath:mysql.ks trustCertificateKeyStorePassword=123456 最终的yml内连接
以下来自网络参考和自己测试整理,没有查找相关资料。若有错误之处,欢迎指正。 当前的Mysql 客户端版本基本都不太能支持 caching_sha2_password 认证,使用Mysql 8.0 的话,建议添加参数: default-authentication-plugin=mysql_native_password 否则可能导致客户端连接失败。以...
最近项目中用到了SSL连接,记录一下,环境为windows10,Mysql版本为5.6 查看是否支持 SSL 首先在 MySQL 上执行如下命令, 查询是否 MySQL 支持 SSL: mysql> SHOW VARIABLES LIKE 'have_ssl'; +---------------+-------+ | Variable_name | Value | +------------...
好的,需要先下载并安装 MySQL Connector/J,这是 MySQL 官方提供的 JDBC 驱动程序。安装完成之后,在项目中引入该驱动程序的 jar 包。 接下来,可以使用以下代码来连接 MySQL 数据库: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JdbcDemo { public static void main(String[] args) { // JDBC连接的URL, 不同数据库有不同的格式: // MySQL的格式为 jdbc:mysql://<host>:<port>/<database>?参数1=值1&参数2=值2&... String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; // MySQLJDBC驱动器类名 String driverClass = "com.mysql.cj.jdbc.Driver"; String user = "root"; String password = "123456"; Connection conn = null; try { // 加载驱动程序 Class.forName(driverClass); // 获得数据库连接 conn = DriverManager.getConnection(url, user, password); System.out.println("连接成功!"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接 if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); 其中,url 是指要连接的数据库 URL,user 和 password 分别是数据库的用户名和密码。需要根据实际情况修改这些参数。
导入mysql到jdk的信任库 keytool -import -trustcacerts -v -alias Mysql -file "/opt/mysql-8.0.18/data/ca.pem" -keystore "/opt/java/jre/lib/security/cacerts" 默认jdk的密码为:changeit jdbc的链接串追加/修改 &useSSL=true JDBC以SSL方式连接MYSQL weixin_51112506: 证书能不能放本地,然后读取本地证书文件 Class文件格式 隔壁寝室老吴: 牛逼啊,我读《深入理解Java虚拟机指南》都看得听懵逼的,博主是真的牛逼啊 远程EJB使用 服务端除了用户,其它不必要