Mil*_*s86 293 java ssl database-connection mysql-error-1064
通过以下两个类,我尝试连接到MySQL数据库.但是,我总是得到这个错误:
Wed Dec 09 22:46:52 CET 2015 WARN:不建议在没有服务器身份验证的情况下建立SSL连接.根据MySQL 5.5.45 +,5.6.26 +和5.7.6+要求如果未设置显式选项,则必须默认建立SSL连接.为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为"false".您需要通过设置useSSL = false显式禁用SSL,或者设置useSSL = true并为服务器证书验证提供信任库.
这是使用以下main
方法的测试类:
public class TestDatabase {
public static void main(String[] args) {
Database db = new Database();
try {
db.connect();
} catch (Exception e) {
e.printStackTrace();
}
db.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是Database
班级:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Database {
private Connection con;
public void connect() throws Exception{
if(con != null) return;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new Exception("No database");
}
String connectionURL = "jdbc:mysql://localhost:3306/Peoples";
con = DriverManager.getConnection(connectionURL, "root", "milos23");
}
public void close(){
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 546
您的连接网址应如下所示,
jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false
Run Code Online (Sandbox Code Playgroud)
这将禁用SSL并抑制SSL错误.
Pet*_*rio 128
如何使用SSL但关闭服务器验证(例如在您自己的计算机上处于开发模式时):
jdbc:mysql://localhost:3306/Peoples?verifyServerCertificate=false&useSSL=true
Run Code Online (Sandbox Code Playgroud)
小智 25
用于启动到 MySQL 服务器的连接的默认值在最近发生了变化,并且(通过快速浏览最流行的问题和堆栈溢出的答案)新值引起了很多混乱。更糟糕的是,标准建议似乎是完全禁用 SSL,这在制造过程中有点灾难。
现在,如果您的连接确实没有暴露在网络中(仅本地主机),或者您在没有真实数据的非生产环境中工作,那么可以肯定:通过包含选项禁用 SSL 没有害处useSSL=false
。
对于其他所有人,需要以下选项集才能使 SSL 与证书和主机验证一起工作:
作为一个额外的好处,看到您已经在使用这些选项,禁用弱 SSL 协议也很简单:
因此,作为一个工作示例,您需要遵循以下主要步骤:
首先,确保您为 MySQL 服务器主机生成了有效证书,并且 CA 证书安装到客户端主机上(如果您使用自签名,那么您可能需要手动执行此操作,但对于流行的公共 CA,它已经存在了)。
接下来,确保 java 密钥库包含所有 CA 证书。在 Debian/Ubuntu 上,这是通过运行来实现的:
update-ca-certificates -f
chmod 644 /etc/ssl/certs/java/cacerts
Run Code Online (Sandbox Code Playgroud)
最后,更新连接字符串以包含所有必需的选项,这在 Debian/Ubuntu 上有点像(根据需要进行调整):
jdbc:mysql://{mysql_server}/confluence?useSSL=true&sslMode=VERIFY_IDENTITY&trustCertificateKeyStoreUrl=file%3A%2Fetc%2Fssl%2Fcerts%2Fjava%2Fcacerts&trustCertificateKeyStorePassword=changeit&enabledTLSProtocols=TLSv1.2&useUnicode=true&characterEncoding=utf8
Run Code Online (Sandbox Code Playgroud)
参考:https : //beansandanicechianti.blogspot.com/2019/11/mysql-ssl-configuration.html
Ari*_*afa 22
提到的url
样子:
jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false
Run Code Online (Sandbox Code Playgroud)
但是当您提及&签名时,在xml配置中,IDE会显示以下错误:
The reference to entity "useSSL" must end with the ';' delimiter.
Run Code Online (Sandbox Code Playgroud)
然后你必须明确地使用&
,而不是&
被确定为&
通过xml
其后xml
你得给在这样的xml配置的网址:
<property name="connection.url">jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false</property>
Run Code Online (Sandbox Code Playgroud)
Jon*_*Jon 21
另一种方法是:
Properties properties = new Properties();
properties.setProperty("user", "root");
properties.setProperty("password", "milos23);
properties.setProperty("useSSL", "false");
properties.setProperty("autoReconnect", "true");
try (Connection conn = DriverManager.getConnection(connectionUrl, properties)) {
...
} catch (SQLException e) {
...
}
Run Code Online (Sandbox Code Playgroud)
虽然,我不认为需要自动重新连接设置来删除警告.
Kha*_*aen 11
我也发现了这个警告,然后通过对连接字符串使用SSL = false后缀来修复它,就像这个示例代码一样.
例:
connectionString = "jdbc:mysql://{server-name}:3306/%s?useUnicode=yes&characterEncoding=UTF-8&useSSL=false"
Run Code Online (Sandbox Code Playgroud)
小智 10
你需要像这样使用你的mysql路径:
<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/>
Run Code Online (Sandbox Code Playgroud)
在与MySQL建立连接时使用它来解决配置单元中的问题
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false</value>
<description>metadata is stored in a MySQL server</description>
</property>
Run Code Online (Sandbox Code Playgroud)
小智 9
要在 Java 连接到数据库时禁用警告,请使用以下概念 \xe2\x88\x92
\nautoReconnect=true&useSSL=false\n
Run Code Online (Sandbox Code Playgroud)\n只需要更改connectionURL,例如:
\nString connectionURL = jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false\n
Run Code Online (Sandbox Code Playgroud)\n这将禁用 SSL 并抑制 SSL 错误。
\n小智 8
这对我来说没问题:
this.conn = (Connection)DriverManager
.getConnection(url + dbName + "?useSSL=false", userName, password);
Run Code Online (Sandbox Code Playgroud)
我在配置 xml 中将此属性用于休眠
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&useSSL=false
</property>
Run Code Online (Sandbox Code Playgroud)
没有 - serverTimezone=UTC - 它不起作用
归档时间: |
|
查看次数: |
380786 次 |
最近记录: |