Caused by: com.mysql.cj.exceptions.CJException: Public Key Retrieval is not allowed
时间: 2023-11-04 12:58:53 浏览: 219
Caused by: com.mysql.cj.exceptions.CJException: Public Key Retrieval is not allowed是数据库连接问题。解决这个问题的方法是在spring.datasource.url后面添加allowPublicKeyRetrieval=true参数。这个参数允许从MySQL服务器检索公钥。可能的原因是MySQL服务器配置不允许检索公钥,而在连接中却需要使用公钥。
相关问题
java启动报错Caused by: com.mysql.cj.exceptions.CJException: Public Key Retrieval is not allowed
当你在Java应用程序中尝试连接MySQL数据库并遇到这个错误“Public Key Retrieval is not allowed”时,这通常意味着MySQL服务器的安全设置禁止从客户端自动获取SSL证书。当你试图通过SSL加密建立连接时,由于缺乏互信的公钥,MySQL拒绝了请求。
以下是可能导致这个问题的一些原因以及解决办法:
1. **服务器配置**:检查MySQL服务器是否启用了SSL,并且对允许的客户端设置了正确的限制。你需要确保服务器的`bind-address`, `ssl-ca`, 和 `ssl-cert` 配置文件已正确配置,允许你的应用访问SSL证书。
2. **客户端证书**:如果你的应用需要提供自签名证书,确保该证书已经被添加到MySQL的可信CA列表(`ssl-ca-file`)里,或者允许匿名或者自签名连接(`skip-ssl-validation`,但请注意这是不推荐的,因为它会降低安全性)。
3. **环境变量**:在Java代码中,你可以设置`javax.net.ssl.trustStore`和`javax.net.ssl.trustStorePassword`来指定信任store的位置和密码。这通常是通过`System.setProperty`来实现的。
4. **驱动版本**:确保你使用的MySql Connector/J驱动与你的MySQL版本兼容,过旧的驱动可能不支持某些安全特性。
如果以上步骤都没有解决问题,可以尝试更新驱动、重启服务,或者咨询MySQL管理员以确保他们的服务器配置正确。
Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed
这个错误通常是由于 MySQL 8.0 版本默认启用了 SSL 和 RSA 验证,而 Java 连接器默认情况下不支持这种验证方式所致。解决方法是在 JDBC 连接字符串中添加 `allowPublicKeyRetrieval=true` 参数,例如:
```
jdbc:mysql://localhost:3306/mydatabase?allowPublicKeyRetrieval=true
```
另外,还需要在 MySQL 中创建一个具有 SSL 和 RSA 验证权限的用户,或者禁用 SSL 和 RSA 验证。具体操作请参考 MySQL 官方文档。
阅读全文