我有一个Spring引导(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 是否需要提供者jar在jre / lib / ext中?
...或者我只是遗漏了什么?
编辑:
但是,这个:
Signature.getInstance("SHA256withRSA",new BouncyCastleProvider());
作品。
答案 0 :(得分: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