gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 06:44:42 28 4
gpt4 key购买 nike

我正在尝试使用以下设置创建到 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com