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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MIkhailF  
#1 Оставлено : 16 мая 2023 г. 11:06:38(UTC)
MIkhailF

Статус: Активный участник

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

Добрый день

Прилагаю код:

Security.setProperty("ssl.SocketFactory.provider", "ru.CryptoPro.ssl.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider", "ru.CryptoPro.ssl.SSLServerSocketFactoryImpl");
Security.setProperty("ssl.KeyManagerFactory.algorithm", "GostX509");
Security.setProperty("ssl.TrustManagerFactory.algorithm", "GostX509");

// Отключение проверки цепочек сертификатов
String cipherSuites2 = "TLS_CIPHER_2012,TLS_CIPHER_2001";
System.setProperty("https.cipherSuites",cipherSuites2);
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2,SSLv3");
System.setProperty("com.sun.security.enableCRLDP", "false");
System.setProperty("com.ibm.security.enableCRLDP", "false");
System.setProperty("tls_prohibit_disabled_validation", "false");
System.setProperty("javax.net.ssl.trustStore",trustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword",trustStorePassword);
Properties props = System.getProperties();
Map<String,String> env = System.getenv();
// Клиентский сертификат
KeyStore ks = KeyStore.getInstance("HDImageStore", "JCP");
ks.load(new FileInputStream(keyStorePath), keyStorePassword.toCharArray());
// ks.load(null,null);
// Корневые сертификаты УЦ
KeyStore kst = KeyStore.getInstance("HDImageStore", "JCP");
kst.load(new FileInputStream(trustStorePath), trustStorePassword.toCharArray());

// Менеджер хранилища.
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(kst);

KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(ks, keyStorePassword.toCharArray());

//SSL Контекст
// SSLContext sc = TLSContext.initClientSSL(null,trustStorePath, trustStorePassword, null);
// SSLContext sc = getSSLContext(kmf.getKeyManagers(),tmf.getTrustManagers(),cipherSuites2.split(","),contextName);
SSLContext sc = getSSLContext(kmf.getKeyManagers(),tmf.getTrustManagers(),cipherSuites2.split(","),trustStorePath,trustStorePassword);
sc.init(kmf.getKeyManagers(), tmf.getTrustManagers(), SecureRandom.getInstance("CPRandom", "JCP"));
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
// HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
HttpClient httpClient = null;
URL url = new URL(baseUri + uri);
InputStream is;
String st;
try {

HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(10000);
con.setSSLSocketFactory(sc.getSocketFactory());
con.setHostnameVerifier(hostnameVerifier);
CookieHandler.setDefault(new CookieManager());
con.setSSLSocketFactory(con.getSSLSocketFactory());
con.connect(); // здесь соединение проходит нормально
is = con.getInputStream(); // эксепшен приходит из этой строки
System.out.println("Connected: " + con);
st = getStContent(is);
} catch (Exception ex) {
ex.printStackTrace();
throw new Exception("Ошибка соединения",ex);
}

При попытке подключения к защищённой странице происходит следующее. Сначала проходит соединение, оно успешно завершается. При поптыке получить InputStream получаю следующий эксепешен:
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: https://protected.atsene...20220101&id=30702405
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
at ru.ets.http.HttpContext.loginCertificate(HttpContext.java:609)

В чём причина и как это можно исправить?
Заранее благодарен
Offline basid  
#2 Оставлено : 17 мая 2023 г. 15:27:18(UTC)
basid

Статус: Активный участник

Группы: Участники
Зарегистрирован: 21.11.2010(UTC)
Сообщений: 1,098

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 151 раз в 136 постах
403 Ферботтен - ответ сайта, к которому вы подключаетесь.
Запрещён вам доступ туда, куда вы "стукнулись".
Offline MIkhailF  
#3 Оставлено : 17 мая 2023 г. 15:31:19(UTC)
MIkhailF

Статус: Активный участник

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

Спасибо, я понял. Но я туда лезу с сертификатами полученными от этого и сайта.
И я не понимаю следующего
1. До этого коннект завершается успешно
2. Возможно чего-то не хватает при повторном обращении, но как это можно проверить?
Offline basid  
#4 Оставлено : 18 мая 2023 г. 7:01:03(UTC)
basid

Статус: Активный участник

Группы: Участники
Зарегистрирован: 21.11.2010(UTC)
Сообщений: 1,098

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 151 раз в 136 постах
Если первое подключение прошло успешно, а на втором - отказано в доступе, то, возможно, что вы "потеряли" сеанс, который нужен сайту.
Например, вы не обработали перенаправление или не предоставли куку, выставленную сайтом.
В любом случае, вряд ли ваша проблема связана с TLS и прочей криптографией.

P.S.
Нет, я не веб-разработчик.
Offline MIkhailF  
#5 Оставлено : 18 мая 2023 г. 10:33:41(UTC)
MIkhailF

Статус: Активный участник

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

Спасибо. Ваше мнение мне ясно. Смущает только, что тот же код при обращении к тестовой странице КриптоПро нормально работает.
Цитата:
или не предоставли куку, выставленную сайтом.

Вот это возможно. Только как её предоставлять. Вот код:
con.connect(); // здесь соединение проходит успешно
con.setSSLSocketFactory(sc.getSocketFactory());
is = con.getInputStream(); // падает здесь
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.