Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29
|
Для установления соединения с удаленным сервером по https использую пример OkHTTPClientSample.java из документации КриптоПро java-csp-5.0.40363-AПроблема в том, что соединение происходит по протоколу TLSv1, нужен TLSv1.2Соответственно, сервер отвечает: Цитата:Received fatal alert: protocol_version При этом, можно установить версию принудительно: Код:ConnectionSpec spec = new ConnectionSpec.Builder(
ConnectionSpec.MODERN_TLS)
.tlsVersions("TLSv1.2")
.cipherSuites(cipherSuites)
.build();
В этом случае, имею ошибку: Цитата:No enum constant com.squareup.okhttp.CipherSuite.TLS_CIPHER_2012 Подскажите, каким образом можно решить эту проблему?
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,038 Сказал(а) «Спасибо»: 88 раз Поблагодарили: 223 раз в 211 постах
|
Добрый день! попробуйте"GostTLSv1.2" |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29
|
Автор: Санчир Момолдаев Добрый день! попробуйте"GostTLSv1.2" Пробовал, та же ошибка No enum constant com.squareup.okhttp.CipherSuite.TLS_CIPHER_2012 Отредактировано пользователем 11 июня 2020 г. 19:12:57(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,910 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 685 раз в 646 постах
|
Здравствуйте. В последнем выложенном дистрибутиве в samples есть пример: OkHTTPClientSample |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29
|
Автор: Евгений Афанасьев Здравствуйте. В последнем выложенном дистрибутиве в samples есть пример: OkHTTPClientSample Я же написал, что использую именно этот пример...
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,910 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 685 раз в 646 постах
|
Добавление провайдеров Security.addProvider(new JCP()); Security.addProvider(new CryptoProvider()); Security.addProvider(new RevCheck()); // revocation Security.addProvider(new Provider()); // tls в начале кода сделали? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29
|
Автор: Евгений Афанасьев Добавление провайдеров Security.addProvider(new JCP()); Security.addProvider(new CryptoProvider()); Security.addProvider(new RevCheck()); // revocation Security.addProvider(new Provider()); // tls в начале кода сделали? нет, не делали, т.к. в примере этого нет. Если добавить это в начале кода, то ошибка java.security.KeyStoreException: java.io.IOException: Invalid keystore format Хранилище у нас JKS
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29
|
Так же пробовал делать подобное: Код:
SSLSocketFactory factory = TLSContext.initClientSSL(null, "trust.store", "123456", null);
// Установка нового соединения с заданным адресом.
HttpsURLConnection connection = (HttpsURLConnection) new URL("https://icrs.nbki.ru/main/").openConnection();
// Задание для него требуемого SSLSocketFactory.
connection.setSSLSocketFactory(factory);
System.out.println("OK");
// Разрыв соединения.
connection.disconnect();
Ошибка: java.io.IOException: Неверный формат хранилища При этом хранилище было создано посредством команды: Цитата:keytool -import -alias susan -file certificate.cer -keystore trust.store
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29
|
Так же пробовал это: Код:
URL url = new URL("https://icrs.nbki.ru/main/");
KeyStore keyStore = KeyStore.getInstance("HDImageStore", "JCP");
keyStore.load(null, null);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, "1".toCharArray()); // пароль для подбора контейнера
KeyStore trustedKeyStore = KeyStore.getInstance("JKS");
trustedKeyStore.load(new FileInputStream(
"C:\\connect.jks"),
"qwerty".toCharArray()
);
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustedKeyStore);
SSLContext sslContext = SSLContext.getInstance("GostTLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory socketFactory = sslContext.getSocketFactory();
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(socketFactory); // не HttpsURLConnection.setDefaultSSLSocketFactory!
connection.connect();
connection.disconnect();
System.out.println("OK");
При этом ошибка: Цитата:Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty При этом, если смотреть сеть, то видно, что коннект успешно проходит, сервер отправляет hello done, а клиент в ответ "Fatal internal error" Отредактировано пользователем 15 июня 2020 г. 7:35:54(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,910 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 685 раз в 646 постах
|
Ошибка 1 с хранилищем - хранилище должно быть формата CertStore, иначе явно укажите тип хранилища JKS. Ошибка 2 - в хранилище должны быть КОРНЕВЫЕ самоподписанные сертификаты, а не серверный. Должен быть корневой сертификат северной цепочки. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close