You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ Idea调试模式下连接Apache Derby报DH密钥尺寸异常

解决IntelliJ调试模式下Apache Derby连接抛出DH密钥大小异常的问题

问题场景

  • IntelliJ开发Java项目,连接Apache Derby数据库
  • 正常运行无报错,功能表现完全正常
  • 调试模式下连接数据库时抛出异常:

java.security.InvalidAlgorithmParameterException: DH key size must be multiple of 64, and can only range from 512 to 8192 (inclusive). The specific key size 256 is not supported

  • 异常会触发IntelliJ反编译器自动打开;捕获异常后继续执行程序,后续运行无异常,且两次测试使用的JVM版本完全一致

原因分析

调试模式下,IntelliJ的JDWP调试代理会干预JVM的SSL/TLS握手流程,导致Derby端尝试使用256位DH密钥协商。而JVM默认安全策略限制DH密钥最小长度为512位,因此触发异常。正常运行时无调试代理干预,所以不会出现该问题。

解决方案

1. 调整JVM安全策略配置

找到JVM安装目录下的jre/lib/security/java.security文件,做以下修改:

  • 定位jdk.tls.disabledAlgorithms配置项,移除其中的DH keySize < 768(若存在),或调整为DH keySize < 256以放宽密钥长度限制
  • 或在文件末尾添加jdk.crypto.KeyAgreement.legacyKDF=true,启用旧版密钥协商算法支持,兼容小长度DH密钥

2. 配置Derby使用合规协议

  • 在数据库连接URL中指定TLSv1.2及以上协议:
    String url = "jdbc:derby://localhost:1527/yourDB;ssl=true;sslProtocol=TLSv1.2";
    
  • 或修改Derby的derby.properties配置文件,添加derby.ssl.protocol=TLSv1.2,强制Derby使用符合JVM安全要求的协议

3. 修改IntelliJ调试VM参数

打开IntelliJ的「Run/Debug Configurations」,找到对应调试配置,在「VM options」中添加以下参数之一:

  • 放宽DH密钥限制:-Djdk.tls.disabledAlgorithms="SSLv3, TLSv1, TLSv1.1, DH keySize < 256"
  • 启用旧版密钥协商:-Djdk.crypto.KeyAgreement.legacyKDF=true

补充说明

正常运行状态是程序的真实业务表现,调试模式下的异常属于调试环境干扰问题。若捕获异常后不影响后续功能,可暂时忽略,但建议按上述方案修复,避免调试过程中频繁触发异常和反编译器打开的干扰。

内容的提问来源于stack exchange,提问作者res1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:50:17