Java:MySQL的SSL连接

Java:MySQL的SSL连接,java,mysql,eclipse,ssl,jdbc,Java,Mysql,Eclipse,Ssl,Jdbc,我正在尝试使用Eclipse中的Java应用程序通过SSL连接到远程Mysql数据库 我正在使用Virtualbox来托管带有JDK的远程Mysql。SSL证书是在此来宾计算机(Linux)中创建的。正在尝试从具有自己的JDK的主机(Windows)进行连接。Eclipse安装在主机中 当我运行java应用程序时,它会抛出以下消息: jdbc:mysql://x.x.x.x:3306/xxxdb? verifyServerCertificate=true&useSSL=true&requir

我正在尝试使用Eclipse中的Java应用程序通过SSL连接到远程Mysql数据库

我正在使用Virtualbox来托管带有JDK的远程Mysql。SSL证书是在此来宾计算机(Linux)中创建的。正在尝试从具有自己的JDK的主机(Windows)进行连接。Eclipse安装在主机中

当我运行java应用程序时,它会抛出以下消息:

jdbc:mysql://x.x.x.x:3306/xxxdb? verifyServerCertificate=true&useSSL=true&requireSSL=true+user+password 周一11月14日17:23:53 SGT 2016警告:不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果未设置explicit选项,默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为“false”。您需要通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任库。

编号:1,测试仪1 编号:2,测试人员2 正在关闭数据库连接。 关门

从它所说的信息中,(摘录)

。或设置useSSL=true,并为服务器证书验证提供信任库。

我的困惑是,因为我在主机和客户机中都有JDK,我在哪里执行
keytool命令将证书导入JVM信任的密钥库?证书位于来宾计算机中,假定为远程

导入CA证书后,应在客户端(来宾)计算机上运行该命令

如果您想了解更多信息,请查看此链接:


您需要在mysql url中传递参数“useSSL=true”,如下所示:

<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/>


谢谢您的回复。但是,我在vm中的客户机充当MySQL服务器。我的主机(Windows)将是连接到VM(MySQL服务器)的客户端。无论如何,我正在Linux中测试该命令。我不知道我做错了什么。在使用keytool将证书导入Mysql服务器(Vbox上的guest)并在Windows(主机)上的Eclipse中执行Java应用程序之后,我得到了以下错误-由以下原因引起:Java.net.SocketException:Java.security.nosuchalgorithException:构造实现时出错(算法:Default,提供程序:SunJSSE,类:sun.security.ssl.SSLContextImpl$DefaultSSLContext)由以下原因引起:java.security.PrivilegedActionException:java.io.FileNotFoundException:\etc\ssl\mykeystore\mykeystore.p12(系统找不到指定的路径),由以下原因引起:java.io.FileNotFoundException:\etc\ssl\mykeystore\mykeystore.p12(系统找不到指定的路径)。该程序是否引用本地java路径?如果是,如何设置为远程java?如果您没有在管理员模式下运行命令提示符,请键入cmd并按Ctrl+Shift+enter。这将在管理员模式下打开命令提示符。如果不是,您还可以转到开始->所有程序->附件->右键单击命令提示符a下面是使用openssl cachain.cert.pem client.cert.pem clientkey.pem mycacerts.jks server.cert.pem serverkey.pem创建的文件。我制作了一份java cacerts的副本,并存储在自定义文件夹中。#diff$java_HOME/jre/lib/security/cacerts mycacerts、 jks#echo$?0