Public Key Retrieval is not allowed 连接 MySQL 提示这个

Public Key Retrieval is not allowed 连接 MySQL 提示这个

在处理加密和密钥管理时,遇到"Public Key Retrieval is not allowed"这个错误通常是在使用Java数据库连接(JDBC)时,特别是在尝试使用SSL/TLS加密连接时。这个错误通常与MySQL数据库的连接属性有关。

原因

MySQL JDBC驱动在5.1.31版本后默认禁用了公共密钥检索(Public Key Retrieval),这是一种安全措施,以防止中间人攻击。当使用SSL连接到MySQL数据库时,如果需要执行某些依赖于公共密钥的操作(如某些特定的加密功能),就必须显式地允许公共密钥的检索。

解决方案

  1. 允许公共密钥检索

在创建数据库连接时,可以通过设置连接属性allowPublicKeyRetrievaltrue来允许公共密钥的检索。例如,如果你正在使用Java的DriverManager来建立连接,可以这样做:

java 复制代码
String url = "jdbc:mysql://hostname:3306/dbname?allowPublicKeyRetrieval=true&useSSL=true";
Connection conn = DriverManager.getConnection(url, "username", "password");
  1. 使用正确的SSL参数

确保你的连接字符串中包含了正确的SSL参数。例如:

java 复制代码
String url = "jdbc:mysql://hostname:3306/dbname?useSSL=true&verifyServerCertificate=false&requireSSL=true&allowPublicKeyRetrieval=true";
Connection conn = DriverManager.getConnection(url, "username", "password");

这里,verifyServerCertificate=false用于在开发或测试环境中临时绕过证书验证(注意:这应该只在信任的环境中使用,生产环境中应设置为true并确保使用有效的SSL证书)。

  1. 更新MySQL JDBC驱动

如果你使用的是较旧的MySQL JDBC驱动版本,考虑升级到最新版本。新版本的驱动可能已经解决了这个问题或者提供了更好的安全性和灵活性。

总结

通过在连接字符串中添加allowPublicKeyRetrieval=true,你可以解决因公共密钥检索被禁用而导致的连接问题。同时,确保你的应用在生产环境中正确处理SSL和证书验证,以增强安全性。如果你不确定如何配置SSL或证书,建议咨询你的系统管理员或查阅MySQL的官方文档。

相关推荐
fen_fen18 小时前
Oracle建表语句示例
数据库·oracle
砚边数影20 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt20 小时前
Djiango配置Celery
数据库·sqlite
云小逸21 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
·云扬·21 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
肉包_51121 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总21 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
此刻你1 天前
常用的 SQL 语句
数据库·sql·oracle
それども1 天前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·1 天前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb