Статус: Новичок
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Какая задача решается, приведите пример кода. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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());
...
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
При установке jtls в java.security меняются настройки для *Factory.getDefaultAlgorithm() и добавляется реализация *SocketFactory. Если jtls не нужен, то удалите его. Если нужен, то можно настройки в файле вернуть, как было (SunX509, PKIX у алгоритмов и убрать про *SocketFactory), и задавать их программно через Security.setProperty(). |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close