java - JDBC 参数 verifyServerCertificate=false 无需客户端 keystore 和信任库即可连接

标签 java mysql ssl jdbc

我正在尝试使用以下设置创建到 MYSQL 服务器的 ssl 连接。我注意到当我在 jdbc url 中指定 verifyServerCertificate=false 时,Java 似乎忽略了我通过 System.setProperty 指定的 keystore 和信任库信息。所以我可以注释掉 1) 中指定的代码,并且 ssl 连接仍然会成功创建。当我指定 verifyServerCertificate=true 时,它​​似乎使用 1) 设置的值。所以我的问题是 JDBC 如何在不使用客户端 keystore 和信任库的情况下在 verifyServerCertificate=false 时创建 ssl 连接?谢谢。

Java代码

1)

System.setProperty("javax.net.ssl.keyStore",(String) keyStorePath);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
System.setProperty("javax.net.ssl.trustStore",(String) trustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword",(String)   trustStorePassword));

2)

String jdbcURL = "jdbc:mysql://192.11.11.111/database?verifyServerCertificate=false&useSSL=true&requireSSL=true";

3)

Connection con = DriverManager.getConnection(jdbcURL, dbuser, dbpassword);

MySQL服务器

授权声明:

4)

'GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'%' IDENTIFIED BY PASSWORD \'*2343ASDFWETDFGDSFGSDFGSDSDFWERASF\' REQUIRE SSL WITH GRANT OPTION'

编辑到my.cnf文件

5)

[mysqld]
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem

附加信息

6) 我正在使用我创建的证书颁发机构。

7) 查询响应

show variables like '%ssl%';

have_openssl    YES 
have_ssl    YES
ssl_ca  /etc/mysql/certs/ca.pem
ssl_capath  
ssl_cert    /etc/mysql/certs/server-cert.pem
ssl_cipher  
ssl_crl 
ssl_crlpath 
ssl_key /etc/mysql/certs/server-key.pem

最佳答案

Java 绝对可以在客户端不验证服务器证书链的情况下建立 SSL 连接。

建立连接的类(javax.net.ssl 类)通常会怀疑未经验证的服务器证书,并且会导致握手失败。

但它们为这些类的用户提供了一种方法,实际上可以说“如果服务器的证书未通过验证也没关系,请继续建立连接”。

这就是当您说 verifyServerCertificate=false 时发生的情况。

从加密的角度来看,SSL 连接是完全有效的,但它不是经过身份验证的连接,因为您不知道服务器证书的来源是什么。

关于java - JDBC 参数 verifyServerCertificate=false 无需客户端 keystore 和信任库即可连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33700647/

相关文章:

java - Hybris 产品模型类

php - 使用 php 和 mysql 自定义自动递增 "id"

http - 在通过 HTTPS 的相互身份验证/双向 ssl 中,每次调用时客户端证书是否每次都传递给服务器?

python - 以编程方式解析网页(使用登录名/ssl)

java - Android 谷歌地图、折线和缩放

java - Apache Tomcat - 来回流

java - 编写java卡小程序的有效方法是什么?

MySQL数据库-备份数据库时出错

mysql - 提高 Solr 和 MySQL 对的性能(使用 JPA 通过 "WHERE IN"连接)

ssl - 如何将多值 p12 证书拆分为单独的证书