Статус: Новичок
Группы: Участники
Зарегистрирован: 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);
}
}
}
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.05.2023(UTC) Сообщений: 3 Откуда: Пермь
|
Добрый день! Удалось решить проблему? Ситуация аналогичная, имеется контейнер сертификатов croinform.p7b, не получается сформировать SSLContext.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Какую ошибку получаете? В примере в хранилище корневых сертификатов D:\\cronos\\cer\\theKeyStore.jks должен быть корневой сертификат из цепочки сервера. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
В стеке нет CryptoPro. Возможно, вы не задали sslSocketFactory у conn в примере либо он задан не в том месте. Отредактировано пользователем 22 мая 2023 г. 18:38:08(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); } } } ```
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
SSLContext.getInstance("SSLv3") - укажите тут "GostTLS". |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Стер ненамеренно пароль от ключницы
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.03.2024(UTC) Сообщений: 4 Откуда: г. Москва
|
Вот полный лог с включенным уровнем логгирования cronos.log (71kb) загружен 4 раз(а).
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close