Как решить java.security.NoSuchProviderException

Я успешно установил на своем компьютере библиотеку криптографии, так что после установки я вижу эти строки в 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

Каковы возможные причины этих сообщений об ошибках?

1 ответ

Решение

У меня была похожая проблема с другим поставщиком безопасности (ERACOM) и решил это с явной регистрацией провайдера:

Security.addProvider(new ERACOMProvider());

Попробуйте зарегистрировать своего провайдера таким же образом, просто создайте и создайте экземпляр и зарегистрируйте его с помощью java.security.Security#addProvider метод. Я надеюсь, это поможет вам.

Другие вопросы по тегам