JDK11迁移至JDK17部署AWS ECS Fargate遇Bouncy Castle版本错误求助
修复AWS ECS Fargate JDK17迁移后Bouncy Castle认证加密错误
核心排查方向及修复步骤
清理依赖冲突
运行依赖分析命令排查是否有旧版本Bouncy Castle被间接引入:- Maven:
mvn dependency:tree | grep bouncycastle - Gradle:
./gradlew dependencyInsight --dependency bouncycastle
找到所有旧版本的bcprov/bcpkix依赖,在项目依赖中显式排除,确保只有你指定的1.77版本被加载。
- Maven:
统一Bouncy Castle版本包类型
JDK17环境下不要同时引入jdk15to18和jdk18on系列包,只保留jdk18on版本:<!-- Maven示例,Gradle同理 --> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk18on</artifactId> <version>1.77</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk18on</artifactId> <version>1.77</version> </dependency>适配JDK17模块系统
JDK17的模块化环境需要显式允许Bouncy Castle模块,在ECS任务的启动命令中添加参数:java --add-modules org.bouncycastle.provider,org.bouncycastle.pkix -jar your-app.jar若使用非模块化jar包,也可在项目
MANIFEST.MF中添加Automatic-Module-Name配置。验证ECS镜像依赖完整性
- 重新构建Docker镜像时清理缓存:
docker build --no-cache -t your-image:latest . - 进入镜像内部检查依赖目录(如Spring Boot项目的
BOOT-INF/lib),确认Bouncy Castle jar包版本为1.77且无旧版本残留。
- 重新构建Docker镜像时清理缓存:
检查加密配置初始化
确认代码中仅使用CryptoConfigurationV2初始化加密配置,避免混用旧版CryptoConfiguration;同时检查是否启用了AES-GCM等需要高版本BC的加密模式,确保配置与AWS SDK版本兼容。
报错根源说明
报错来自AWS SDK的CryptoConfigurationV2.checkBouncyCastle方法,该方法会校验Bouncy Castle版本是否满足认证加密要求。常见触发原因包括:依赖冲突导致旧版本BC被加载、JDK17模块限制导致BC未被正确识别、镜像构建时未更新依赖。
内容的提问来源于stack exchange,提问作者harman bhutani
相关产品推荐
相关产品推荐

