如何解决java.security.NoSuchProviderException问题

3

我已经成功在我的机器上安装了密码学库,因此在安装后,我在jre\lib\security\java.security文件中看到了以下内容:

security.provider.11=ru.CryptoPro.JCP.JCP
security.provider.12=ru.CryptoPro.Crypto.CryptoProvider
security.provider.13=ru.CryptoPro.reprov.RevCheck
security.provider.14=ru.CryptoPro.ssl.Provider
security.provider.15=ru.CryptoPro.JCSP.JCSP

这些行自动出现在java.security文件中。此外,当我导入所需的模块时,没有任何错误:

import ru.CryptoPro.JCP.*;
import ru.CryptoPro.JCP.KeyStore.*;
import ru.CryptoPro.JCP.params.JCPProtectionParameter;
import ru.CryptoPro.JCSP.JCSP;

这是完全没有问题的。然而,当我在代码中添加了一个小命令时:

KeyStore ks = KeyStore.getInstance("REGISTRY", JCSP.PROVIDER_NAME);

我收到了一长串错误信息:
java.security.NoSuchProviderException: no such provider: JCSP at  
sun.security.jca.GetInstance.getService(Unknown Source) at 
sun.security.jca.GetInstance.getInstance(Unknown Source) at 
java.security.Security.getImpl(Unknown Source) at 
java.security.KeyStore.getInstance(Unknown Source) at 
com.test.examples.Test.doGet(Test.java:40) at 
javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at 
... list goes on

这些错误信息可能的原因是什么?

也许在运行时,与您的IDE相比,工作中使用了不同的JDK/JRE。 - Artjom B.
似乎你是对的。我刚刚执行了这个库的单元测试,并且它们都正常。现在我会检查我的IDE。 - Jacobian
1个回答

3

我曾遇到类似的问题,使用不同的安全提供程序(ERACOM),并通过显式提供程序注册解决了该问题:

Security.addProvider(new ERACOMProvider());

尝试以相同的方式注册您的提供程序,只需创建实例并使用java.security.Security#addProvider方法进行注册。希望这可以帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接