Через ControlPane JCP добавлен клиентский сертификат и корневой сертификат в Certificate Store. Оба валидны. Версия JCP 1.0.54.
Цитата:
System.setProperty("javax.net.ssl.trustStore", "i:/trust.store");
System.setProperty("javax.net.ssl.trustStoreType", "HDImageStore");
System.setProperty("javax.net.ssl.trustStorePassword", "111");
При работе возникает ошибка java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty.
Путь корректный, пароль верный; JVM, по идее, имеет привилегии для чтения файла хранилища (
как точно в этом убедиться?), свойства устанавливаются в самом начале (а также пробовал по-другому через аргументы JVM -Djavax.net.ssl.trustStore=i:\trust.store -Djavax.net.ssl.trustStorePassword=111) - все это проверялось, т.к. если указать не тот путь, будет ошибка "Keystore was tampered with...", а если указать не тот пароль, то будет ошибка "java.net.SocketException: java.lang.RuntimeException: Default SSL context init failed".
По успешной инициализации контекста можно судить, что путь до хранилища с трастовым сертификатом корректный?
Цитата:
июн 19, 2014 11:33:19 PM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 1.0.54 36641
июн 19, 2014 11:33:20 PM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore is : S:/CryptoPro
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore type is : HDImageStore
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: keyStore provider is :
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init keystore
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: defaultStoreProvider =
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO:
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init keymanager of type GostX509
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore is: i:/trust.store
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore type is : HDImageStore
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: trustStore provider is :
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init truststore
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init trustmanager of type GostX509
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: init context...
июн 19, 2014 11:33:20 PM ru.CryptoPro.ssl.SSLContextImpl d
INFO: Context inited.
При этом все равно ошибка:
Цитата:
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at ru.CryptoPro.ssl.s.<init>(Unknown Source)
at ru.CryptoPro.ssl.e.b(Unknown Source)
at ru.CryptoPro.ssl.e.checkServerTrusted(Unknown Source)
at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
... 78 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(Unknown Source)
at java.security.cert.PKIXParameters.<init>(Unknown Source)
at java.security.cert.PKIXBuilderParameters.<init>(Unknown Source)
... 88 more
Как устранить ошибку? Может быть дело, что в самом корневом сертификате что-то не так? Точно такой же подход для работы с веб-сервисом RA ранее успешно отрабатывал.
Пробовал получать объект HttpsURLConnection через sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null); как
Цитата:
HttpsURLConnection con = (HttpsURLConnection) new URL(url).openConnection();
con.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
con.connect();
соединение проходит (свидетельство того, что путь и пароль верные, если специально другие делать, то будут ошибки).
И еще вопрос - контрольная панель JCP ведет себя следующим образом:
1. создаем Certificate Store и задаем пароль
2. добавляем в него корневой сертификат
3. закрываем панель
4. когда вновь открываем, пароль к хранилищу не подходит - выдается сообщение об ошибке:
Cant open the store. IO error: Keystore was tampered with, or password was incorrect.
С чем это может быть связано?
Отредактировано пользователем 19 июня 2014 г. 23:42:35(UTC)
| Причина: Не указана