我试图使用以下设置来创建到MysqL服务器的ssl连接.我注意到,当我在jdbc url中指定verifyServerCertificate = false时,Java似乎忽略了我通过System.setProperty指定的密钥库和信任库信息.所以我可以注释掉1)中指定的代码,并且仍然可以成功创建ssl连接.当我指定verifyServerCertificate = true时,它似乎使用1)设置的值.所以我的问题是JDBC如何在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连接完全有效,但它不是经过身份验证的连接,因为您不知道服务器证书的来源是什么.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。