首页  >  文章  >  数据库  >  为什么我的 Java 应用程序在连接到 MySQL 时抛出“不允许公钥检索”异常?

为什么我的 Java 应用程序在连接到 MySQL 时抛出“不允许公钥检索”异常?

Susan Sarandon
Susan Sarandon原创
2024-11-01 09:08:30345浏览

Why Does My Java Application Throw a

连接 Java - MySQL:排除“不允许公钥检索”异常

尝试建立与 MySQL 数据库的连接时使用 Java 连接器 8.0.11,开发人员可能会遇到“不允许公钥检索”异常。此错误发生在连接握手过程中,表示客户端(Java 应用程序)无权从服务器获取公钥进行身份验证。

异常原因

当 Java 应用程序尝试检索服务器的公钥时,会发生异常,该公钥用于加密和传输用户密码等敏感信息。默认情况下,MySQL 不允许检索公钥,以防止潜在的中间人 (MITM) 攻击。

解决方案

要解决此问题,Java 应用程序必须显式配置为在建立数据库连接时允许检索公钥。这可以通过将 allowedPublicKeyRetrieval=true 参数指定为 JDBC 连接字符串的一部分来实现。

以下是包含 allowedPublicKeyRetrieval 参数的 JDBC 连接字符串示例:

jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true

请注意如果连接不是通过安全通道进行的,则启用公钥检索会使客户端容易受到 MITM 攻击,从而带来潜在的安全风险(例如,HTTPS)。出于开发和测试目的,禁用 SSL 并在连接字符串中显式指定 useSSL=false 可能更安全:

jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false

其他提示

如果问题尽管指定了allowPublicKeyRetrieval=true,但仍然存在,请尝试以下附加措施:

  • 确保MySQL 服务器的 SSL/TLS 配置是否正确配置。
  • 验证 Java 应用程序是否使用最新版本的 MySQL JDBC 连接器。
  • (暂时)禁用防火墙以消除任何网络-相关阻塞。
  • 重新启动 MySQL 服务以确保建立干净的连接。

以上是为什么我的 Java 应用程序在连接到 MySQL 时抛出“不允许公钥检索”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn