关于bouncycastle:Spring Boot和JCA提供者

Spring boot and JCA providers

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

1
2
3
4
5
6
7
8
9
10
11
12
13
pom.xml
...
<dependency>
  <groupId>org.bouncycastle</groupId>
  bcprov-jdk15on</artifactId>
  <version>1.54</version>
</dependency>
<dependency>
  <groupId>org.bouncycastle</groupId>
  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:

1
2
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是否要求提供程序jar位于jre / lib / ext中?

...或者我只是想念一些东西?

编辑:

但是,这:

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

作品。


您需要先安装Bouncycastle提供程序,然后才能使用它。 参见http://www.bouncycastle.org/wiki/display/JA1/Provider+安装

动态安装提供程序

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

静态安装提供程序

将提供程序添加为$JAVA_HOME/jre/lib/security/java.security中的最后一个条目

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

将Bouncy Castle提供程序jar添加到$JAVA_HOME/jre/lib/ext