Java 忽略了类路径中的 Bouncy Castle JCA 提供程序版本

Bouncy Castle JCA Provider Version In Classpath Ignored by Java

当我尝试实例化依赖于 bouncy castle 1.46 的密钥库时,我的 spring 启动应用程序出现错误的密钥库版本错误。 我在 pom.xml 甚至我的类路径上添加了正确的版本 1.46,但是当我执行 spring-boot 应用程序时,运行时对 Bouncy Castle 提供程序的版本检查表明版本为 1.51。

如何确保 spring-boot 应用程序运行在我的 pom.xml.

上定义的 Bouncy Castle 1.46
<dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.46</version>
</dependency>

private void installJCAProvider() {
    BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();

    System.err.println("Bouncy Catle Provider Version " + bouncyCastleProvider.getVersion() + " \nName " + bouncyCastleProvider.getName() + " | \n" + bouncyCastleProvider.getInfo());


    Security.addProvider(bouncyCastleProvider);

    Provider[] providers = Security.getProviders();

    for (Provider provider : providers) {
        System.err.println("Installed security providers" + 

        provider.getInfo() + "\n");
    }
}

日志

Bouncy Castle Provider Version 1.51 
Name SC | 
BouncyCastle Security Provider v1.51

运行 mvn dependency:tree 查看版本 1.51 的来源并将其从依赖项中排除。

此外 spring-boot 在其 POMs 定义依赖版本中声明了一组属性。因此,使用 属性 定义版本的 Bouncy Castle 库查看 spring-boot starter 的 POM,并在你的 POM 中重新定义它的值。

据此https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html 您可以尝试通过将依赖项声明放在依赖项列表中 spring-boot 启动器的上方来欺骗 Maven。

@Danila 的回答很有帮助,但是,也请按照 oracle 提供的说明将 bouncy castle 版本 1.46 {或您的首选版本}添加到 $[=13 中的 CSP - 加密服务提供商列表中=] https://docs.oracle.com/cd/E19830-01/819-4712/ablsc/index.html干杯!