网络上推荐的做法是配置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
mysql 的jdbc驱动提供了一个办法
将证书导入证书库,命令行启动
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";
// MySQL的JDBC驱动器类名
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文件格式
隔壁寝室老吴:
远程EJB使用