有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JDBC参数verifyServerCertificate=false连接,无需clientkeystore和truststore

我试图使用以下设置创建到MYSQL服务器的ssl连接。我注意到,当我在JDBCURL中指定verifyServerCertificate=false时,Java似乎忽略了我通过系统指定的密钥库和信任库信息。setProperty。因此,我可以注释掉1)中指定的代码,ssl连接仍将成功创建。当我指定verifyServerCertificate=true时,它似乎使用1)设置的值。所以我的问题是,当verifyServerCertificate=false时,JDBC如何在不使用客户机密钥库和信任库的情况下创建ssl连接?谢谢

Java代码

(一)

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));

(二)

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

(三)

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

MYSQL服务器

拨款声明:

(四)

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

编辑到我的。cnf文件

(五)

[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

共 (1) 个答案

  1. # 1 楼答案

    Java完全可以建立SSL连接,而无需客户端验证服务器的证书链

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

    但它们提供了一种方法,让这些类的用户实际上可以说:“如果服务器的证书没有验证,就可以继续建立连接”

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

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