Public Key Retrieval is not allowed

"Public Key Retrieval is not allowed"错误通常出现在MySQL数据库连接过程中,当客户端尝试从服务器检索RSA公钥进行身份验证时未得到允许。这个错误可能由多种原因引起,以下是对该错误的详细分析以及相应的解决方案:

错误原因分析

  1. 禁用SSL/TLS协议:

    • 当SSL/TLS协议被禁用时,客户端和服务器之间的通信不再加密。如果客户端需要公钥来解密服务器端的加密密码,就会因为缺少公钥而导致此错误。
  2. 用户登录状态变更:

    • 在新建数据库用户、用户首次登录、数据库的用户名或密码发生改变后登录,以及服务器端调用FLUSH PRIVILEGES指令刷新服务器缓存等情况下,客户端可能无法获取到服务器的公钥,从而引发此错误。
  3. Java系统属性或安全策略限制:

    • 在使用Java进行连接时,如果jdk.tls.allowLegacyHelloMessages或jsse.enableSNIExtension系统属性被设置为不允许公钥检索,或者应用程序的安全策略配置阻止了公钥自动检索功能,也可能导致此错误。
  4. 服务器配置问题:

    • 如果服务器端配置了不支持公钥自动检索或者服务器证书链不完整,客户端可能无法验证服务器公钥,从而导致此错误。

解决方案

  1. 启用SSL/TLS协议:

    • 如果条件允许,最好的解决方法是启用SSL/TLS协议,确保客户端和服务器之间的通信加密。这可以通过在数据库连接字符串中设置相关参数来实现(如useSSL=true,但具体参数可能因数据库类型和版本而异)。
  2. 允许客户端检索公钥:

    • 如果必须禁用SSL/TLS协议,可以通过在数据库连接字符串中添加allowPublicKeyRetrieval=true参数来允许客户端从服务器检索公钥。例如,对于Java的JDBC连接,可以修改连接字符串为:"jdbc:mysql://hostname:port/database?allowPublicKeyRetrieval=true&useSSL=false"。
  3. 使用CLI客户端制造登录缓存:

    • 如果必须禁用SSL/TLS协议,并且出现了公钥检索错误,可以尝试使用CLI客户端登录一次MySQL数据库,以制造登录缓存。这有助于在某些情况下解决公钥检索问题。
  4. 调整Java系统属性或安全策略:

    • 检查并更新相关Java系统属性设置,确保允许公钥检索。同时,调整应用程序的安全策略,允许公钥自动检索和/或SNI扩展。
  5. 检查服务器配置:

    • 确保服务器端配置正确,提供完整的证书链,并且支持公钥自动检索。如果服务器证书存在问题,请确保服务器已安装正确的证书,并且客户端信任该证书颁发机构。
  6. 更改身份验证方法:

    • 如果控制MySQL用户的创建方式,可以考虑使用mysql_native_password身份验证插件来避免这个错误。这可以通过登录到MySQL数据库,并使用ALTER USER命令来更改用户的身份验证方法来实现。同时,也可以考虑修改MySQL配置文件,使默认身份验证插件为mysql_native_password。

综上所述,"Public Key Retrieval is not allowed"错误可能由多种原因引起,但通常可以通过启用SSL/TLS协议、允许客户端检索公钥、调整Java系统属性或安全策略、检查服务器配置以及更改身份验证方法等方法来解决。如果以上方法均无法解决问题,建议联系数据库管理员或寻求专业的技术支持。

实战:

添加allowPublicKeyRetrieval=true&useSSL=false 正常使用

相关推荐
蜗牛互联网2 小时前
Java 17调用Embeddings API:余弦相似度与FAQ拒答阈值
java·开发语言·人工智能
Q26433650232 小时前
【有源码】基于SpringBoot+Vue的博物馆展览与服务一体化平台-java博物馆数字化展品展示与交互平台设计
java·vue.js·spring boot·spring·毕业设计·javaweb·课程设计
guo_wen_qiang2 小时前
项目使用sentinel遇到的问题
java·sentinel
CarIise3 小时前
IDEA与Maven基础课堂笔记
java·intellij-idea·caffe
小溪学编程3 小时前
C语言篇:枚举类型
java·c语言·前端
云和数据.ChenGuang3 小时前
JAVAEE AI工程师路线图
java·人工智能·java-ee·fastapi·springai·langchain4j
2601_962885723 小时前
如何用 Python 统计 A 股连续涨停(几连板)?
java·linux·python
大圣编蚕3 小时前
Spring AOP 失效排查:从原理到实战的完整指南
java·后端·spring
EatFan3 小时前
MCP 从概念到落地:Java(Spring AI Alibaba)与 .NET 双栈接入实操对比
java·人工智能·后端·spring·.net·java后端·mcp
专业程序开发源3 小时前
springboot全民健身和饮食健康管理系统29158-计算机课程设计、毕业设计
java·spring boot·后端·python·django·php·课程设计