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_CA或VERIFY_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
— 业精于勤荒于嬉,行成于思毁于随 —

浙公网安备 33010602011771号