Spring boot 和 JCA 提供者

问题描述 投票:0回答:2

我有一个 Spring boot(1.4.2.RELEASE)项目,其中 bouncycastle 作为 pom.xml 中的依赖项,如下所示:

pom.xml
...
<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk15on</artifactId>
  <version>1.54</version>
</dependency>
<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcpkix-jdk15on</artifactId>
  <version>1.54</version>
</dependency>
...

但是,当我尝试在代码中指定“BC”作为 JCA 操作的提供者时,例如:

Signature aSig = Signature.getInstance("SHA256withRSA","BC");

我得到的标准是没有这样的提供商例外:

java.security.NoSuchProviderException: no such provider: BC

尽管有条目

security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider

在我的 jre 的 java.security 文件中。

通过我的 pom 文件中的此依赖项,构建的 jar 在 BOOT-INF/lib 文件夹中具有充气城堡 jar:

3277268 Tue Dec 29 12:46:28 EST 2015 BOOT-INF/lib/bcprov-jdk15on-1.54.jar
673715 Tue Dec 29 12:46:02 EST 2015 BOOT-INF/lib/bcpkix-jdk15on-1.54.jar

我可以毫无问题地访问其中的类,但 JCA 找不到提供者。

那么,JCA require 提供程序 jar 位于 jre/lib/ext 中吗?

...或者我只是错过了什么?

编辑:

但是,这个:

Signature.getInstance("SHA256withRSA",new BouncyCastleProvider());

有效。

spring-boot bouncycastle jce
2个回答
3
投票

使用前需要安装 Bouncycastle 提供程序。请参阅 http://www.bouncycastle.org/wiki/display/JA1/Provider+Installation

动态安装提供程序

import org.bouncycastle.jce.provider.BouncyCastleProvider;
...
Security.addProvider(new BouncyCastleProvider());

静态安装提供程序

将提供商添加为

$JAVA_HOME/jre/lib/security/java.security

中的最后一个条目
security.provider.N=org.bouncycastle.jce.provider.BouncyCastleProvider

将 Bouncy Castle 提供程序 jar 添加到

$JAVA_HOME/jre/lib/ext


0
投票

我遇到了同样的问题,你最终弄清楚出了什么问题吗?请帮忙。

© www.soinside.com 2019 - 2024. All rights reserved.