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的官方文档。

相关推荐
剩下了什么5 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
山峰哥6 小时前
数据库工程与SQL调优——从索引策略到查询优化的深度实践
数据库·sql·性能优化·编辑器
较劲男子汉6 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
java搬砖工-苤-初心不变6 小时前
MySQL 主从复制配置完全指南:从原理到实践
数据库·mysql
WangYaolove13148 小时前
基于python的在线水果销售系统(源码+文档)
python·mysql·django·毕业设计·源码
山岚的运维笔记8 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
roman_日积跬步-终至千里9 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
汇智信科9 小时前
打破信息孤岛,重构企业效率:汇智信科企业信息系统一体化运营平台
数据库·重构
野犬寒鸦9 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总9 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法