Добрый день
Прилагаю код:
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)
В чём причина и как это можно исправить?
Заранее благодарен