Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Boris T  
#1 Оставлено : 22 февраля 2019 г. 4:31:58(UTC)
Boris T

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.02.2019(UTC)
Сообщений: 2

При использования Bouncy Castle для чтения keystore ключа (файл ключа pfx, т.е. PKCS12) в JRE с установленным КриптоПро JCP+JTLS получаю ошибку:
Код:

java.security.KeyStoreException: java.lang.NullPointerException: No password supplied for PKCS#12 KeyStore.

	at ru.CryptoPro.ssl.cl_38.<init>(Unknown Source)
	at ru.CryptoPro.ssl.KeyManagerFactoryImpl$GostX509.engineInit(Unknown Source)
	at javax.net.ssl.KeyManagerFactory.init(Unknown Source)
... [вырезаны вызовы]

Caused by: java.lang.NullPointerException: No password supplied for PKCS#12 KeyStore.
	at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)
	at java.security.KeyStore.load(Unknown Source)
	... 32 more


Пароль, конечно, указан. Что с этим можно сделать?

Окружение:
Bouncy Castle 1.61
JRE 1.8.0_181
КриптоПро JCP+JTLS 2.0.40035
Offline Евгений Афанасьев  
#2 Оставлено : 22 февраля 2019 г. 11:38:13(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Какая задача решается, приведите пример кода.
Offline Boris T  
#3 Оставлено : 27 февраля 2019 г. 4:45:19(UTC)
Boris T

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.02.2019(UTC)
Сообщений: 2

Устанавливается TLS соединение со взаимной аутентификацией. Код примерно такой:

Код:

String store = ...; // keystore location
String password = ...; // keystore password

//load key from pfx file
KeyStore keyStore = KeyStore.getInstance("PKCS12", BouncyCastleProvider.PROVIDER_NAME)
FileInputStream fis = new FileInputStream(store);
try {
    keyStore.load(fis, Utils.NVL(password).toCharArray());
} finally {
    if (fis != null) fis.close();
}

KeyManagerFactory factory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
factory.init(keyStore, password.toCharArray()); // exception thrown here
KeyManager[] keyManagers = factory.getKeyManagers();

TrustManager[] trustManagers = ...;

...

SSLContext context = SSLContext.getInstance(protocol);
context.init(keyManagers, trustManagers, null);

Connection connection = ...;
connection.setSSLSocketFactory(context.getSSLSocketFactory());

...
Offline Евгений Афанасьев  
#4 Оставлено : 27 февраля 2019 г. 7:45:52(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
При установке jtls в java.security меняются настройки для *Factory.getDefaultAlgorithm() и добавляется реализация *SocketFactory. Если jtls не нужен, то удалите его. Если нужен, то можно настройки в файле вернуть, как было (SunX509, PKIX у алгоритмов и убрать про *SocketFactory), и задавать их программно через Security.setProperty().
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.