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 楼答案
Java完全可以建立SSL连接,而无需客户端验证服务器的证书链
建立连接的类(javax.net.ssl类)通常会怀疑未经验证的服务器证书,并会导致握手失败
但它们提供了一种方法,让这些类的用户实际上可以说:“如果服务器的证书没有验证,就可以继续建立连接”
这就是当你说verifyServerCertificate=false时发生的情况
从加密的角度来看,SSL连接是完全有效的,但它不是经过身份验证的连接,因为您不知道服务器证书的来源是什么