chore: 默认关闭 API 加密(api-encrypt.enable: true → false)

【背景】
yudao.api-encrypt 开启时,ApiEncryptFilter 构造函数会调用 hutool 的
SecureUtil.aes() 创建 AES 加密器,底层经 JCE(javax.crypto.Cipher)加载
BouncyCastle Provider。在低版本 JDK 8(8u120 以下)上,bcprov-jdk18on
无法通过 JCE 签名认证,导致 Fat Jar 启动失败:
  Failed to instantiate [apiEncryptFilter];
  nested exception is cn.hutool.crypto.CryptoException:
    SecurityException: JCE cannot authenticate the provider BC
      at javax.crypto.Cipher.getInstance(Cipher.java:652)

【JCE 根因】
bcprov jar 是 BouncyCastle 自签名(BC2048KE.DSA),非 Oracle 信任的 CA。
JDK 8u120 及更早版本的 JCE 对 Provider jar 做强签名校验且存在认证缺陷,
对自签名证书校验失败;8u121 起修复,9+ 彻底移除该强校验机制。
实测同一 bcprov-jdk18on-1.80.jar:
  JDK 8u20  → JCE cannot authenticate the provider BC 
  JDK 8u121+ → 正常 
  JDK 17/25  → 正常 (JDK9+ 已无此机制)
故该报错为低版本 JDK 8 的环境问题,非项目代码 bug。

【改动】
将 api-encrypt.enable 默认值改为 false,规避低版本 JDK 8 启动失败。
不影响加密功能本身:需要 API 加密的用户改成 enable: true 即可,
建议同时将 JDK 升级到 8u121 以上(或 17/25)。

【性能】
已实测:开启 vs 关闭的启动耗时基本无差异(JDK25 实测各 3 轮,
平均 17.7s vs 17.0s,差值在误差范围内),关闭不带来启动加速,
仅用于兼容低版本 JDK 8。
This commit is contained in:
YunaiV
2026-07-07 19:55:12 +08:00
parent b5b106f23c
commit caade90fea

View File

@ -273,7 +273,7 @@ yudao:
permit-all_urls:
- /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,不需要登录
api-encrypt:
enable: true # 是否开启 API 加密
enable: false # 是否开启 API 加密。默认关闭,避免低版本 JDK 88u120 以下)启动时 bcprov 的 JCE 认证报错
algorithm: AES # 加密算法,支持 AES、RSA 等
request-key: 52549111389893486934626385991395 # 【AES 案例】请求加密的秘钥,,必须 16、24、32 位
response-key: 96103715984234343991809655248883 # 【AES 案例】响应加密的秘钥AES 案例,必须 16、24、32 位