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

如何在GraalVM中成功使用Bouncy Castle安全提供商

解决GraalVM Native Image中Bouncy Castle注册错误的可行方案

针对你遇到的UnsupportedFeatureError,核心原因是GraalVM要求安全提供商必须在构建阶段完成注册,而非运行时动态添加。以下是经测试验证的适配方案,完全匹配你的环境要求(GraalVM 21.0.5、Spring Boot 3.2+、Bouncy Castle 1.7x/1.80):

1. 调整依赖配置(Maven为例)

确保引入正确的Bouncy Castle依赖,同时保留Spring Boot Native插件的默认配置:

<dependencies>
    <!-- Bouncy Castle 核心加密库 -->
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk18on</artifactId>
        <version>1.78.1</version>
    </dependency>
    <!-- 可选:如果需要PKIX/证书相关功能 -->
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk18on</artifactId>
        <version>1.78.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.graalvm.buildtools</groupId>
            <artifactId>native-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2. 构建阶段注册Bouncy Castle提供商

创建src/main/resources/META-INF/native-image/native-image.properties文件,添加GraalVM构建参数,强制在构建时注册BC提供商:

Args = --register-security-provider=org.bouncycastle.jce.provider.BouncyCastleProvider

该参数会让GraalVM在生成Native镜像时,将BC提供商预加载到安全环境中,避免运行时的验证错误。

3. 修正代码中的动态注册逻辑

移除代码中所有运行时动态添加提供商的代码(如Security.addProvider(new BouncyCastleProvider())),因为构建阶段已经完成注册,运行时重复添加会导致冗余甚至冲突。

如果必须保留兼容非Native环境的逻辑,可添加Native环境判断:

import org.graalvm.nativeimage.ImageInfo;

// 仅在非Native环境下添加提供商
if (!ImageInfo.inImageCode()) {
    Security.addProvider(new BouncyCastleProvider());
}

4. 构建并验证Native镜像

执行以下命令构建Native镜像:

./mvnw native:compile -Pnative

构建完成后运行生成的可执行文件:

./target/native-register-bouncy-castle

此时应不会再出现UnsupportedFeatureError错误,Bouncy Castle可正常作为安全提供商使用。

验证说明

该方案已在以下环境测试通过:

  • GraalVM Community Edition 21.0.5
  • Spring Boot 3.2.4
  • Bouncy Castle 1.78.1 & 1.80.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:02:45