О том и речь. Я пытаюсь скормить в HttpsUrlConnection вот этот url:
http://tlsgost-256auth.cryptopro.ru/ :
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
В итоге я получаю совершенно логичный эксепшен, потому что невозможно привести HttpUrlConnection, полученный из вызова openConnection(), в HttpsUrlConnection.
Потому я и уточняю, какие и где надо брать урлы тестовых страниц.Вот мой код полностью:
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("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
*/
System.setProperty("tls_prohibit_disabled_validation", "false");
System.setProperty("javax.net.ssl.trustStore",trustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword",trustStorePassword);
// Клиентский сертификат
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;
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);
} catch (Exception ex) {
ex.printStackTrace();
throw new Exception("Ошибка соединения",ex);
}
Заранее спасибо за ответ