关于高并发接口,使用hikari出现连接失败问题
秋水 Lv5

Public Key Retrieval is not allowed

mysql8的连接方式 caching_sha2_password

mysql5.多的版本是 mysql_native_password

解决方案

  1. 可以在连接字符串中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥。

    1. 获取Mysql服务器的工钥,使用如下命令

      1
      2
      mysql> SHOW VARIABLES LIKE 'caching_sha2_password_public_key_path';

      如果没有找到公钥文件,你可以手动生成一个:

      1
      2
      3

      openssl genrsa -out server-key.pem 2048
      openssl rsa -in server-key.pem -pubout > server-public-key.pem
    2. 将公钥文件复制到客户端:

      将服务器的 RSA 公钥文件(例如 server-public-key.pem)复制到你的客户端机器(即运行应用程序的机器)上,确保应用程序能够访问该文件。

    3. 将公钥文件复制到客户端:

      将服务器的 RSA 公钥文件(例如 server-public-key.pem)复制到你的客户端机器(即运行应用程序的机器)上,确保应用程序能够访问该文件。

      1
      2
      3
      4
      5
      spring:
      datasource:
      url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&ServerRSAPublicKeyFile=/path/to/server-public-key.pem
      username: yourUsername
      password: yourPassword

    结论 使用这种方式可以避免潜在的中间人攻击或者数据泄漏。

  2. 设置AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥。

       datasource:
     url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true
     username: yourUsername
     password: yourPassword
     hikari:
       maximum-pool-size: 10  # 可根据需求调整连接池的大小
    

    ​ allowPublicKeyRetrieval=true ,设置这个,但是会导致会被中间人攻击,

  3. 如何避免攻击

    将useSSL=ture,但这样就会降低速度。

什么是中间人攻击

在公钥检索过程中,如果没有额外的加密措施(如使用 SSL/TLS),公钥检索请求可能会被拦截和篡改。这种攻击称为中间人攻击(MITM)。攻击者可以拦截公钥,并使用其私钥解密传输的敏感信息。

  • Post title:关于高并发接口,使用hikari出现连接失败问题
  • Post author:秋水
  • Create time:2024-09-08 21:55:44
  • Post link:tai769.github.io2024/09/08/关于高并发接口,使用hikari出现连接失败问题/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.