Статус: Участник
Группы: Участники
Зарегистрирован: 27.04.2015(UTC) Сообщений: 14 Откуда: Воронеж Сказал(а) «Спасибо»: 3 раз
|
Использовал пример из папки samples-sources Код:
public class Application {
public static void main(String[] args) throws Exception {
try {
Security.addProvider(new JCSP()); // провайдер JCSP
} catch (Exception e) {
System.err.println("Exception in initializing crypto pro : "+ e);
} catch (Error er) {
System.err.println("Error in initializing crypto pro : "+ er);
}
try {
System.setProperty("com.sun.security.enableCRLDP", "true");
// Отладка
System.setProperty("javax.net.debug", "ssl:handshake");
System.setProperty("https.protocols", "TLSv1.2");
System.setProperty("jdk.tls.client.protocols", "TLSv1.2");
System.setProperty("https.default.protocol", "TLS");
System.setProperty("https.socket.protocols", "TLSv1");
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
InputStream cacerts = Application.class.getClassLoader().getResourceAsStream("cacerts");
InputStream p12Cert = Application.class.getClassLoader().getResourceAsStream("p12.pfx");
TrustManager[] trustManagers = getTrustManagers("jks", cacerts, "changeit");
KeyManager[] keyManagers = getKeyManagers(JCSP.PFX_STORE_NAME, p12Cert, "password");
sslCtx.init(keyManagers, trustManagers, null);
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
URL url = new URL("https://bki-b2b-test.scoring.ru/cr4.php");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(socketFactory);
connection.connect();
connection.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
log.info("Connection was successfully");
}
protected static KeyManager[] getKeyManagers(String keyStoreType, InputStream keyStoreFile, String keyStorePassword) throws Exception {
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(keyStoreFile, keyStorePassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, keyStorePassword.toCharArray());
return kmf.getKeyManagers();
}
protected static TrustManager[] getTrustManagers(String trustStoreType, InputStream trustStoreFile, String trustStorePassword) throws Exception {
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
trustStore.load(trustStoreFile, trustStorePassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
return tmf.getTrustManagers();
}
}
получаю ошибку в строчке connection.connect() Код:WARNING: main, handling exception: java.lang.UnsupportedOperationException
javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
at ru.CryptoPro.ssl.cl_3.a(Unknown Source)
at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source)
at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source)
at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source)
at ru.CryptoPro.ssl.SSLSocketImpl.b(Unknown Source)
at ru.CryptoPro.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:168)
at ru.pglukhov.security.Application.main(Application.java:55)
Caused by: java.lang.UnsupportedOperationException
at java.base/javax.net.ssl.ExtendedSSLSession.getStatusResponses(ExtendedSSLSession.java:157)
at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:220)
at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:129)
at ru.CryptoPro.ssl.cl_18.a(Unknown Source)
at ru.CryptoPro.ssl.cl_18.a(Unknown Source)
at ru.CryptoPro.ssl.cl_66.u(Unknown Source)
at ru.CryptoPro.ssl.cl_66.a(Unknown Source)
at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source)
at ru.CryptoPro.ssl.SSLSocketImpl.o(Unknown Source)
... 6 more
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Используйте не Код:
KeyManagerFactory.getDefaultAlgorithm()
TrustManagerFactory.getDefaultAlgorithm()
а "Gost509". |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.04.2015(UTC) Сообщений: 14 Откуда: Воронеж Сказал(а) «Спасибо»: 3 раз
|
Автор: Евгений Афанасьев Здравствуйте. Используйте не Код:
KeyManagerFactory.getDefaultAlgorithm()
TrustManagerFactory.getDefaultAlgorithm()
а "Gost509". Сделал как вы сказали Код:public class Application {
public static void main(String[] args) throws Exception {
try {
Security.addProvider(new JCSP()); // провайдер JCSP
Security.addProvider(new JCP()); // провайдер JCP
Security.addProvider(new RevCheck());
} catch (Exception e) {
System.err.println("Exception in initializing crypto pro : "+ e);
} catch (Error er) {
System.err.println("Error in initializing crypto pro : "+ er);
}
try {
System.setProperty("com.sun.security.enableCRLDP", "true");
// Отладка
System.setProperty("javax.net.debug", "ssl:handshake");
System.setProperty("https.protocols", "TLSv1.2");
System.setProperty("jdk.tls.client.protocols", "TLSv1.2");
System.setProperty("https.default.protocol", "TLS");
System.setProperty("https.socket.protocols", "TLSv1");
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
InputStream cacerts = Application.class.getClassLoader().getResourceAsStream("cacerts");
InputStream p12Cert = Application.class.getClassLoader().getResourceAsStream("p12.pfx");
TrustManager[] trustManagers = getTrustManagers("jks", cacerts, "changeit");
KeyManager[] keyManagers = getKeyManagers(JCSP.PFX_STORE_NAME, p12Cert, "password");
sslCtx.init(keyManagers, trustManagers, null);
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
URL url = new URL("https://bki-b2b-test.scoring.ru/cr4.php");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(socketFactory);
connection.connect();
connection.disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
log.info("Connection was successfully");
}
protected static KeyManager[] getKeyManagers(String keyStoreType, InputStream keyStoreFile, String keyStorePassword) throws Exception {
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(keyStoreFile, keyStorePassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("Gost509");
kmf.init(keyStore, keyStorePassword.toCharArray());
return kmf.getKeyManagers();
}
protected static TrustManager[] getTrustManagers(String trustStoreType, InputStream trustStoreFile, String trustStorePassword) throws Exception {
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
trustStore.load(trustStoreFile, trustStorePassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("Gost509");
tmf.init(trustStore);
return tmf.getTrustManagers();
}
}
но получил java.security.NoSuchAlgorithmException: Gost509 TrustManagerFactory not available. RevCheck добавил т.к. видел в другом посте что используется GostX509 и так же его пробовал использовать. Но там так же ошибка была, поэтому решил Gost509 добить. В cacert у меня используется обычное хранилище, что скопировал из папки JDK, но добавил туда сертификаты, которые мне прислали из Equifax. в P12.pfx лежит сертификат, которые мне дали для доступа в их сервисы.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Автор: billGilbert NoSuchAlgorithmException: Gost509 TrustManagerFactory not available Добавьте и TLS провайдер тогда: Цитата: Security.addProvider(new Provider()); // пакет ru.CryptoPro.ssl модуля cpSSL.jar
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.04.2015(UTC) Сообщений: 14 Откуда: Воронеж Сказал(а) «Спасибо»: 3 раз
|
Автор: Евгений Афанасьев Автор: billGilbert NoSuchAlgorithmException: Gost509 TrustManagerFactory not available Добавьте и TLS провайдер тогда: Цитата: Security.addProvider(new Provider()); // пакет ru.CryptoPro.ssl модуля cpSSL.jar
Та же ошибка, но когда поставил GostX509
Код:public class Application {
public static void main(String[] args) throws Exception {
try {
Security.addProvider(new JCSP()); // провайдер JCSP
Security.addProvider(new JCP()); // провайдер JCP
Security.addProvider(new RevCheck());
Security.addProvider(new Provider());
} catch (Exception e) {
System.err.println("Exception in initializing crypto pro : "+ e);
} catch (Error er) {
System.err.println("Error in initializing crypto pro : "+ er);
}
try {
System.setProperty("com.sun.security.enableCRLDP", "true");
// Отладка
System.setProperty("javax.net.debug", "all");
System.setProperty("https.protocols", "TLSv1.2");
System.setProperty("jdk.tls.client.protocols", "TLSv1.2");
System.setProperty("https.default.protocol", "TLS");
System.setProperty("https.socket.protocols", "TLSv1");
//
System.setProperty("tls_prohibit_disabled_validation", "false");
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
InputStream cacerts = Application.class.getClassLoader().getResourceAsStream("cacerts");
InputStream p12Cert = Application.class.getClassLoader().getResourceAsStream("p12.pfx");
TrustManager[] trustManagers = getTrustManagers("jks", cacerts, "changeit");
KeyManager[] keyManagers = getKeyManagers(JCSP.PFX_STORE_NAME, p12Cert, "password");
sslCtx.init(keyManagers, trustManagers, null);
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
URL url = new URL("https://bki-b2b-test.scoring.ru/cr4.php");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(socketFactory);
connection.connect();
connection.disconnect();
log.info("Connection was successfully");
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected static KeyManager[] getKeyManagers(String keyStoreType, InputStream keyStoreFile, String keyStorePassword) throws Exception {
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(keyStoreFile, keyStorePassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, keyStorePassword.toCharArray());
return kmf.getKeyManagers();
}
protected static TrustManager[] getTrustManagers(String trustStoreType, InputStream trustStoreFile, String trustStorePassword) throws Exception {
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
trustStore.load(trustStoreFile, trustStorePassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
return tmf.getTrustManagers();
}
}
То получил эту ошибку Цитата:javax.net.ssl|ALL|01|main|2023-12-13 15:04:35.212 MSK|SSLContextImpl.java:119|done seeding of SecureRandom дек. 13, 2023 3:04:35 PM ru.CryptoPro.ssl.SSLSocketImpl a WARNING: main, handling exception: javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_10.cl_5: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_10.cl_5: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at ru.CryptoPro.ssl.cl_3.a(Unknown Source) at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source) at ru.CryptoPro.ssl.cl_66.a(Unknown Source) at ru.CryptoPro.ssl.cl_66.a(Unknown Source) at ru.CryptoPro.ssl.cl_18.a(Unknown Source) at ru.CryptoPro.ssl.cl_18.a(Unknown Source) at ru.CryptoPro.ssl.cl_66.u(Unknown Source) at ru.CryptoPro.ssl.cl_66.a(Unknown Source) at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source) at ru.CryptoPro.ssl.SSLSocketImpl.o(Unknown Source) at ru.CryptoPro.ssl.SSLSocketImpl.b(Unknown Source) at ru.CryptoPro.ssl.SSLSocketImpl.startHandshake(Unknown Source) at java.base/sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:567) at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:168) at ru.pglukhov.security.Application.main(Application.java:60) Caused by: ru.CryptoPro.ssl.pc_10.cl_5: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at ru.CryptoPro.ssl.pc_10.cl_2.a(Unknown Source) at ru.CryptoPro.ssl.pc_10.cl_2.a(Unknown Source) at ru.CryptoPro.ssl.pc_10.cl_4.b(Unknown Source) at ru.CryptoPro.ssl.cl_122.a(Unknown Source) at ru.CryptoPro.ssl.cl_122.a(Unknown Source) at ru.CryptoPro.ssl.cl_122.checkServerTrusted(Unknown Source) ... 12 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source) at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297) ... 18 more
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Уже лучше. В cacerts, скорее всего, нет корневого сертификата сервера. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 27.04.2015(UTC) Сообщений: 14 Откуда: Воронеж Сказал(а) «Спасибо»: 3 раз
|
Автор: Евгений Афанасьев Уже лучше. В cacerts, скорее всего, нет корневого сертификата сервера. Евгений, ваши советы привели меня к решению. я добавлял сертификаты через утилитку KeyStoreExplorer и вроде видел их в свои cacert. Но решил последовать Вашему совету и добавил заново сертификаты, которые ранее мне выслала поддержка Equifax, через консоль. т.е. выполнил 2 команды Цитата:keytool -importcert -trustcacerts -file scoring_2023.cer -alias scoring_2023 -keystore cacerts keytool -importcert -trustcacerts -file root.cer -alias scoring_root -keystore cacerts После этого пример застрелял. Последний вопрос. А те параметры которые я использую в System.setProperty являются актуальными и обязательными? Я их собрал из ВСЕХ постов, где была речь о подключении по SSL/TLS, прошу сильно не ругать :( Код:
public class Application {
public static void main(String[] args) throws Exception {
try {
Security.addProvider(new JCSP()); // провайдер JCSP
Security.addProvider(new JCP()); // провайдер JCP
Security.addProvider(new RevCheck());
Security.addProvider(new Provider());
} catch (Exception e) {
System.err.println("Exception in initializing crypto pro : "+ e);
} catch (Error er) {
System.err.println("Error in initializing crypto pro : "+ er);
}
try {
System.setProperty("com.sun.security.enableCRLDP", "true");
// Отладка
System.setProperty("javax.net.debug", "all");
System.setProperty("https.protocols", "TLSv1.2");
System.setProperty("jdk.tls.client.protocols", "TLSv1.2");
System.setProperty("https.default.protocol", "TLS");
System.setProperty("https.socket.protocols", "TLSv1");
//
System.setProperty("tls_prohibit_disabled_validation", "false");
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
InputStream cacerts = Application.class.getClassLoader().getResourceAsStream("cacerts");
InputStream p12Cert = Application.class.getClassLoader().getResourceAsStream("p12.pfx");
TrustManager[] trustManagers = getTrustManagers("jks", cacerts, "changeit");
KeyManager[] keyManagers = getKeyManagers(JCSP.PFX_STORE_NAME, p12Cert, "password");
sslCtx.init(keyManagers, trustManagers, null);
SSLSocketFactory socketFactory = sslCtx.getSocketFactory();
URL url = new URL("https://bki-b2b-test.scoring.ru/cr4.php");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(socketFactory);
connection.connect();
connection.disconnect();
log.info("Connection was successfully");
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected static KeyManager[] getKeyManagers(String keyStoreType, InputStream keyStoreFile, String keyStorePassword) throws Exception {
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(keyStoreFile, keyStorePassword.toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, keyStorePassword.toCharArray());
return kmf.getKeyManagers();
}
protected static TrustManager[] getTrustManagers(String trustStoreType, InputStream trustStoreFile, String trustStorePassword) throws Exception {
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
trustStore.load(trustStoreFile, trustStorePassword.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
return tmf.getTrustManagers();
}
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Попробуйте оставить так: Цитата: System.setProperty("com.sun.security.enableCRLDP", "true"); // Отладка System.setProperty("javax.net.debug", "all"); System.setProperty("https.protocols", "TLSv1.2"); System.setProperty("jdk.tls.client.protocols", "TLSv1.2"); System.setProperty("https.default.protocol", "TLS"); System.setProperty("https.socket.protocols", "TLSv1"); // System.setProperty("tls_prohibit_disabled_validation", "false");
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
=> Цитата: System.setProperty("com.sun.security.enableCRLDP", "true"); // грузить CRL для проверки сертификата сервера из сети // Отладка System.setProperty("javax.net.debug", "all"); // System.setProperty("tls_prohibit_disabled_validation", "false");
SSLContext sslCtx = SSLContext.getInstance("GostTLSv1.2"); // для поддержки TLS 1.2, 1.1, 1.0
Отладка javax.net.debug по желанию. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close