MyBatisPlus - [07] Q&A

题记部分

 

001 || Public Key Retrieval is not allowed

通常出现在使用JDBC连接数据库时,特别时在尝试通过SSL/TLS加密连接到MySQL或MariaDB数据库时。这个错误提示意味着驱动程序尝试从服务器获取公钥,但该操作被配置禁止了。解决方案如下:

(1)修改连接字符串

在JDBC URL中添加 allowPublicKeyRetrieval=true 参数来允许公钥检索。如:

jdbc:mysql://your_host:3306/your_database?useSSL=true&allowPublicKeyRetrieval=true

(2)使用正确的SSL设置

如果需要使用SSL,并且希望保持较高的安全性,应该配置好所有的SSL相关参数,包括提供有效的CA证书、客户端证书和私钥等。确保你已经正确设置了sslMode参数(如VERIFY_CAVERIFY_IDENTITY),并且提供了相应的证书文件路径。

jdbc:mysql://your_host:3306/your_database?useSSL=true&sslMode=VERIFY_CA&serverSslCert=/path/to/ca-cert.pem

(3)禁用SSL

如果不需要SSL连接,最简单的方法是禁用它。可以通过设置useSSL=false来实现

jdbc:mysql://your_host:3306/your_database?useSSL=false

禁用SSL会降低连接的安全性,因为传输的数据将不会被加密。只有在网络环境被认为是安全的情况下才应该这样做。

(4)更新MySQL驱动

确保正在使用最新版本MySQL Connector/J(JDBC驱动)。较新的驱动版本可能修复了一些已知的问题,并且默认启用了更安全的行为。

最佳实践

  • 安全性优先:尽量避免直接设置allowPublickKeyRetrieval=true,除非你完全理解其带来的潜在安全风险。
  • 配置SSL:如果可能的话,总是配置完整的SSL设置以确保数据传输的安全性。
  • 更新依赖:定期检查并更新你的数据库驱动和其他相关依赖,以获得最新的功能和安全补丁。
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=true&allowPublicKeyRetrieval=true&serverTimezone=UTC
spring.datasource.username=myuser
spring.datasource.password=mypassword

 

spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
spring.datasource.username=myuser
spring.datasource.password=mypassword

 

 

 

 

 

 

— 业精于勤荒于嬉,行成于思毁于随 —

posted @   HOUHUILIN  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示