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 @ 2024-07-05 11:02  HOUHUILIN  阅读(37)  评论(0)    收藏  举报