当前位置: 首页 > 面试题库 >

JDBC参数verifyServerCertificate = false无需客户端密钥库和信任库即可连接

桑睿识
2023-03-14
问题内容

我正在尝试使用以下设置来创建与MYSQL服务器的ssl连接。我注意到,当我在jdbc URL中指定verifyServerCertificate =
false时,Java似乎会忽略通过System.setProperty指定的密钥库和信任库信息。因此,我可以注释掉1)中指定的代码,并且ssl连接仍将成功创建。当我指定verifyServerCertificate
= true时,似乎使用的是1)设置的值。所以我的问题是,在verifyServerCertificate =
false的情况下,JDBC如何在不使用客户端密钥库和信任库的情况下创建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连接是完全有效的,但它不是经过身份验证的连接,因为您不知道服务器证书的来源。



 类似资料:
  • 我正在尝试从Azure连接到Oracle数据库。NET网络应用程序。目标是不必在Azure Web应用程序上安装Oracle客户端。 我已经尝试了几个选项,但似乎没有任何效果。有什么建议吗? 目前我收到以下错误: 系统数据OracleClient需要Oracle客户端软件版本8.1。7或以上。

  • 问题内容: 我想有一个不连接数据库就表现为mysql_real_escape_string的功能,因为有时我需要在没有数据库连接的情况下进行干式测试。mysql_escape_string已被弃用,因此是不可取的。我的一些发现: http://www.gamedev.net/community/forums/topic.asp?topic_id=448909 http://w3schools.in

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

  • 问题内容: 有时,我必须编写软件以与位于Cisco VPN中的特定服务器建立套接字。我只是像没有VPN一样编写软件(使用标准套接字库)。是时候运行该程序了,我使用计算机上安装的客户端软件手动连接到VPN,然后运行程序本身。 但是,需要编写软件以利用能够直接通过VPN进行通信而无需使用任何已安装客户端软件的专用套接字库。 这是一些Java代码,说明了我想要的功能: 是否可以在不安装任何客户端软件的情

  • 我正在做一个项目,我们使用Tomcat8作为应用服务器,因此使用JSP和servlet。每个JSP都显示一种项目列表。应用程序的用户有可能模拟一个项目。这意味着什么并不重要。当用户单击“模拟”按钮时,将执行以下过程: 通过Ajax(javascript)将执行一个servlet,该servlet生成一个zip文件并将该文件存储在服务器的硬盘上 所以我的问题是:通知JSP模拟已经完成的最佳方式是什么

  • 问题内容: 据我了解,密钥库通常会保存私钥/公钥,而信任库通常只保存公钥(并且代表您打算与之通信的受信任方的列表)。好吧,这是我的第一个假设,因此,如果这不正确,那么我可能起步并不顺利… 我很想了解使用keytool时如何/何时区分商店。 因此,到目前为止,我已经使用 这将创建我的keystore.ks文件。我回答了我是否信任bob的问题,但是我不清楚这是否创建了密钥库文件或信任库文件?我可以将我