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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Landerth  
#1 Оставлено : 14 декабря 2016 г. 18:00:38(UTC)
Landerth

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

Группы: Участники
Зарегистрирован: 14.12.2016(UTC)
Сообщений: 1
Российская Федерация

Идёт работа над автоматизацией доступа к Кронос через API
http://croinform.ru/support/api
Для этого необходимы сертификаты cacer.p7b и ssl.croinform.cer (Выданные КриптоПро)
Было создано хранилище сертификатов при помощи утилиты keytool.
ssl.croinform.cer помещается туда без проблем, cacer.p7b же пришлось вначале установить в Internet Explorer (там он разделился на 7 сертификатов, которые затем были сохранены в виде сертификата cer и добавлены в то же хранилище).

После этого сообщений об отсутствии сертификатов программа не выдаёт, однако выходит ошибка
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Нужно ли каким-то образом устанавливать сертификаты непосредственно в систему и корректны ли были описанные манипуляции с файлом cacer.p7b?

Текст программы привожу ниже

Код:



import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyStore;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManagerFactory;

public class CronosAccesser {

	

	public static void main(String[] args) throws Exception {

		KeyStore store = KeyStore.getInstance("JKS");
		store.load(new FileInputStream("D:\\cronos\\cer\\theKeyStore.jks"), "worldwide".toCharArray());
		KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
		kmf.init(store, "worldwide".toCharArray());
		TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
		tmf.init(store);
		;
		SSLContext context = SSLContext.getInstance("SSLv3");
		context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
		SSLSocketFactory factory = context.getSocketFactory();

		URL url = new URL("https://ssl.croinform.ru:450/api.test");

		HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
		String str = "Type=Login&Login=**********&Password=**********";
		conn.setDoOutput(true);
		conn.setRequestProperty("Content-Length", str.length() + "");

		conn.getOutputStream().write(str.getBytes("UTF8"));
		conn.setSSLSocketFactory(factory);
		InputStream inputstream = conn.getInputStream();
		InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
		BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

		String string = null;
		while ((string = bufferedreader.readLine()) != null) {
			System.out.println("Received " + string);
		}
	}

}
Offline Иван Артемьевских  
#2 Оставлено : 22 мая 2023 г. 11:19:44(UTC)
Иван Артемьевских

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

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

Добрый день! Удалось решить проблему? Ситуация аналогичная, имеется контейнер сертификатов croinform.p7b, не получается сформировать SSLContext.
Offline Евгений Афанасьев  
#3 Оставлено : 22 мая 2023 г. 12:05:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Какую ошибку получаете?
В примере в хранилище корневых сертификатов D:\\cronos\\cer\\theKeyStore.jks должен быть корневой сертификат из цепочки сервера.
Offline Иван Артемьевских  
#4 Оставлено : 22 мая 2023 г. 18:08:13(UTC)
Иван Артемьевских

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

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

Ошибка следующая:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:336)
at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293)
at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:185)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172)
at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1426)
at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1336)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:450)
at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:421)
at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:572)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1367)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1342)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:246)
at ru.ifr.lcc.lkb.service.api.impl.Cronos.main(Cronos.java:32)

Process finished with exit code 1
Offline Евгений Афанасьев  
#5 Оставлено : 22 мая 2023 г. 18:37:26(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
В стеке нет CryptoPro. Возможно, вы не задали sslSocketFactory у conn в примере либо он задан не в том месте.

Отредактировано пользователем 22 мая 2023 г. 18:38:08(UTC)  | Причина: Не указана

Offline Иван Артемьевских  
#6 Оставлено : 24 мая 2023 г. 18:16:40(UTC)
Иван Артемьевских

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

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

Дело в том, что все сделал по примеру:

```
import javax.net.ssl.*;
import java.io.*;
import java.net.URL;
import java.security.*;
import java.security.cert.CertificateException;

public class Cronos {

public static void main(String[] args) throws IOException, NoSuchAlgorithmException, KeyStoreException, CertificateException, UnrecoverableKeyException, KeyManagementException {

KeyStore store = KeyStore.getInstance("JKS");
store.load(new FileInputStream("C:\\norvik\\croinform.jks"), "changeit".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(store, "changeit".toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(store);

SSLContext context = SSLContext.getInstance("SSLv3");
context.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory factory = context.getSocketFactory();

URL url = new URL("https://test.croinform.ru/request");

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type", "application/json; charset=utf-8");
conn.setRequestMethod("POST");
conn.setDoOutput(true);

String params = "{\"UserName\":\"**********\",\"Password\":\"**********\",\"Params\":{\"SurName\":\"Иванов\",\"FirstName\":\"Иван\",\"MiddleName\":\"Иванович\",\"DateOfBirth\":\"01.01.1911\",\"SeriaNumber\":\"7000123456\",\"Address\":{\"Region\":\"45\",\"City\":\"Москва\",\"Street\":\"Приорова\",\"House\":\"30\",\"noFlat\":true}},\"SubSystem\":\"FL\",\"Services\":[\"Exp\"]}";

try(OutputStream os = conn.getOutputStream()) {
byte[] input = params.getBytes("utf-8");
os.write(input, 0, input.length);
}

conn.setSSLSocketFactory(factory);
InputStream inputstream = conn.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

String string = null;
while ((string = bufferedreader.readLine()) != null) {
System.out.println("Received " + string);
}
}
}
```
Offline Евгений Афанасьев  
#7 Оставлено : 25 мая 2023 г. 8:19:16(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
SSLContext.getInstance("SSLv3") - укажите тут "GostTLS".
Offline Егор Воронянский  
#8 Оставлено : 19 марта 2024 г. 15:56:41(UTC)
Егор Воронянский

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

Группы: Участники
Зарегистрирован: 19.03.2024(UTC)
Сообщений: 4
Российская Федерация
Откуда: г. Москва

Коллеги, здравствуйте! Пытаюсь провернуть тоже самое. Сейчас при попытке получаю следующую ошибку

```
2024-03-19 20:40:11.848 ERROR 73143 --- [nio-8084-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://api.croinform.ru/request": Server selected improper ciphersuite TLS_DH_RSA_WITH_AES_128_CBC_SHA; nested exception is javax.net.ssl.SSLHandshakeException: Server selected improper ciphersuite TLS_DH_RSA_WITH_AES_128_CBC_SHA] with root cause
javax.net.ssl.SSLHandshakeException: Server selected improper ciphersuite TLS_DH_RSA_WITH_AES_128_CBC_SHA
```

В логах вижу, что cpSSL отрабататывает
```
2024-03-19 20:40:09.854 WARN 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : %% No appropriate keys for handshake
2024-03-19 20:40:09.866 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl init.
2024-03-19 20:40:09.872 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : trigger seeding of SecureRandom
2024-03-19 20:40:09.873 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : done seeding SecureRandom
2024-03-19 20:40:09.873 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl initialized.
2024-03-19 20:40:09.948 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : trustStore is : No File Available, using empty keystore.
2024-03-19 20:40:09.949 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : trustStore type is : CertStore
2024-03-19 20:40:09.949 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : trustStore provider is :
2024-03-19 20:40:09.949 INFO 73143 --- [nio-8084-exec-1] ru.CryptoPro.ssl.SSLLogger : init truststore
```

Пароль от CertStore - 12345678
Подскажите пожалуйста в чем может быть проблема?
Прикладываю также проект для воспроизведения - https://disk.yandex.ru/d/Drah5HKPy80jUQ

Отредактировано пользователем 19 марта 2024 г. 18:27:45(UTC)  | Причина: Стер ненамеренно пароль от ключницы

Offline Евгений Афанасьев  
#9 Оставлено : 19 марта 2024 г. 21:44:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Включите логирование SSLogger уровня ALL, как тут https://support.cryptopr...lirovnija-kriptopro-jtls
Приложите лог.
Или сервер очень старый, или он не поддерживает ГОСТ.
Offline Егор Воронянский  
#10 Оставлено : 21 марта 2024 г. 9:48:13(UTC)
Егор Воронянский

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

Группы: Участники
Зарегистрирован: 19.03.2024(UTC)
Сообщений: 4
Российская Федерация
Откуда: г. Москва

Вот полный лог с включенным уровнем логгирования
cronos.log (71kb) загружен 4 раз(а).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.