Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Здравствуйте! Подскажите пожалуйста куда копать - посмотреть пример? Нашел это - взято из примеров: Цитата://Проверка типа хранилища. //При неверном вводе присваивается значение по умолчанию HDImageStore. final String ks; ks = ArgList.getProperty(ComLine.keyStoreType);
// Использование Java CSP вместо JCP. String provider = System.getProperty( cpSSLConfig.DEFAULT_PROVIDER, JCP.PROVIDER_NAME);
if (provider.equalsIgnoreCase(JCP.PROVIDER_NAME)) {
if (ks.equalsIgnoreCase(ComLine.HDImageStore)) { } else if (ks.equalsIgnoreCase(ComLine.FloppyStore)) { } else if (ks.equalsIgnoreCase(ComLine.OCFStore)) { } else if (ks.equalsIgnoreCase(ComLine.RTStore)) { } else if (ks.equalsIgnoreCase(ComLine.J6CFStore)) { } else if (ks.equalsIgnoreCase(ComLine.NO_STORE)) { } else {
ArgList.setProperty(ComLine.keyStoreType, ComLine.HDImageStore); log.info("Incorrect key store type: " + ks + ". Value by default is appropriated: " + ComLine.HDImageStore);
}
}
//System.setProperty("javax.net.ssl.supportGVO", "true");
//=============================================================================
final int sslPort = Integer.decode(ArgList.getProperty(ComLine.PORT)); final String sslHost = ArgList.getProperty(ComLine.SERVER);
final JTLS_samples.Client client = new JTLS_samples.Client(sslHost, sslPort); client.setTimeout(3000000);
// Конфигурация подключения.
String trustStorePasswordString = ArgList.getProperty(ComLine.trustStorePassword); char[] trustStorePassword = trustStorePasswordString != null ? trustStorePasswordString.toCharArray() : null;
String keyStoreAliasString = ArgList.getProperty(ComLine.keyStoreAlias); keyStoreAliasString = (!keyStoreAliasString.equalsIgnoreCase("null")) ? keyStoreAliasString : null;
String keyStorePasswordString = ArgList.getProperty(ComLine.keyStorePassword); char[] keyStorePassword = (!keyStorePasswordString.equalsIgnoreCase("null")) ? keyStorePasswordString.toCharArray() : null;
boolean clientAuth = keyStorePassword != null;
SSLConfiguration sslConfig = new SSLConfiguration( ArgList.getProperty(ComLine.trustStoreType), ArgList.getProperty(ComLine.trustStorePath), trustStorePassword, clientAuth, ArgList.getProperty(ComLine.keyStoreType), keyStoreAliasString, keyStorePassword );
// Контекст подключения.
SSLConnector clientSslConn = new SSLConnector(sslConfig); clientSslConn.prepare(false);
SSLContext clientSslContext = clientSslConn.create();
// Соединение и получение файла.
if (client.get(clientSslContext, ArgList.getProperty(ComLine.fileget), false, ArgList.getProperty(ComLine.fileout), null) != 0) { throw new IOException("Couldn't get data."); } // if
} catch (NullPointerException e) { log.info(ComLine.HELP_ClIENT); } catch (ArrayIndexOutOfBoundsException e) { log.info(ComLine.HELP_ClIENT); } }
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Примеры есть в samples-sources.jar. Другой пример, с использованием HttpsURLConnection: Код:
import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.KeyStore;
public class TlsConnection {
public static void main(String[] args) throws Exception {
// Проверка цепочки сертификатов другой стороны. Может быть
// отключена в панели управления JCP, "Настройки TLS".
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
// Хранилище доверенных сертификатов формата CertStore (может
// быть и другой) с корневым сертификатом цепочки сертификатов сервера.
String trustStorePath = "trust.store";
KeyStore trustStore = KeyStore.getInstance("CertStore");
trustStore.load(new FileInputStream(trustStorePath),
"11111111".toCharArray()); // пароль к хранилищу - 11111111
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
// Предположим, включена клиентская аутентификация.
// Контейнер клиента лежит в папке C:\Users\<user>\AppData\Local\Crypto Pro
// или /var/opt/cprocsp/keys/<user>. Запуск выполняется под управлением
// учетной записи пользователя-владельца контейнера. Пароль к контейнеру
// - 11111111. Сертификат содержит CRLDP (если нет - отключить проверку
// цепочки) и Extended Key Usage "Клиентская аутентификация". Предположим,
// алгоритм ключа ГОСТ 2012 (256). Издатель сертификата должен быть в числе
// доверенных сервера (в certificate request). Сервер должен в certificate
// request прислать поддержку типов ключей ГОСТ 2012, т.е. CertType: 238, 239,
// иначе сертификат не будет отобран по алгоритму. Соответственно,
// использоваться сторонами должна сайферсюита TLS_CIPHER_2012 (0xff85).
KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, null);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, "11111111".toCharArray()); // пароль к ключу для отбора по типу и паролю
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();
URL url = new URL("https://remote.server.ru:7777"); // адрес подключения
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(sslSocketFactory); // используется метод объекта, а не статический
printContent(connection); // чтение данных
connection.disconnect();
}
private static void printContent(HttpsURLConnection connection){
if(connection != null) {
try {
System.out.println("**************");
BufferedReader br = new BufferedReader( new InputStreamReader(
connection.getInputStream(), "windows-1251") );
String input;
while ((input = br.readLine()) != null) {
System.out.println(input);
}
br.close();
System.out.println("**************");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Отредактировано пользователем 13 февраля 2019 г. 17:49:18(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Евгений Афанасьев  Здравствуйте. Примеры есть в samples-sources.jar. Другой пример, с использованием HttpsURLConnection: Код:
import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.KeyStore;
public class TlsConnection {
public static void main(String[] args) throws Exception {
// Проверка цепочки сертификатов другой стороны. Может быть
// отключена в панели управления JCP, "Настройки TLS".
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");
...
Поправьте пожалуйста, если есть ошибки. Пример без использования CRLDP - POST,GET запросы. Код:
import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.KeyStore;
public class TlsConnection {
public static void main(String[] args) throws Exception {
// Проверка цепочки сертификатов другой стороны. Может быть
// отключена в панели управления JCP, "Настройки TLS".
System.setProperty("com.sun.security.enableCRLDP", "false");
System.setProperty("com.ibm.security.enableCRLDP", "false");
// Хранилище доверенных сертификатов формата CertStore (может
// быть и другой) с корневым сертификатом цепочки сертификатов сервера.
//String trustStorePath = "trust.store";
//KeyStore trustStore = KeyStore.getInstance("CertStore");
//trustStore.load(new FileInputStream(trustStorePath),"11111111".toCharArray()); // пароль к хранилищу - 11111111
//TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
//tmf.init(trustStore);
// Предположим, включена клиентская аутентификация.
// Контейнер клиента лежит в папке C:\Users\<user>\AppData\Local\Crypto Pro
// или /var/opt/cprocsp/keys/<user>. Запуск выполняется под управлением
// учетной записи пользователя-владельца контейнера. Пароль к контейнеру
// - 11111111. Сертификат содержит CRLDP (если нет - отключить проверку
// цепочки) и Extended Key Usage "Клиентская аутентификация". Предположим,
// алгоритм ключа ГОСТ 2012 (256). Издатель сертификата должен быть в числе
// доверенных сервера (в certificate request). Сервер должен в certificate
// request прислать поддержку типов ключей ГОСТ 2012, т.е. CertType: 238, 239,
// иначе сертификат не будет отобран по алгоритму. Соответственно,
// использоваться сторонами должна сайферсюита TLS_CIPHER_2012 (0xff85).
KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, null);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, "11111111".toCharArray()); // пароль к ключу для отбора по типу и паролю
SSLContext sslCtx = SSLContext.getInstance("GostTLS");
sslCtx.init(kmf.getKeyManagers(), null, null);
SSLSocketFactory sslSocketFactory = sslCtx.getSocketFactory();
URL url = new URL("https://remote.server.ru:7777"); // адрес подключения
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
//GET
connection.setRequestMethod("GET");
// POST
/*
connection.setRequestMethod("POST");
String urlParameters = "sn=C02G8416DRJM&cn=&locale=&caller=&num=12345";
// Send post request
connection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
*/
connection.setUseCaches(false);
connection.setSSLSocketFactory(sslSocketFactory); // используется метод объекта, а не статический
printContent(connection); // чтение данных
connection.disconnect();
}
private static void printContent(HttpsURLConnection connection){
if(connection != null) {
try {
System.out.println("**************");
BufferedReader br = new BufferedReader( new InputStreamReader(
connection.getInputStream(), "windows-1251") );
String input;
while ((input = br.readLine()) != null) {
System.out.println(input);
}
br.close();
System.out.println("**************");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Отредактировано пользователем 14 февраля 2019 г. 9:19:31(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Если проверку цепочки сертификатов надо отключить, то это надо делать в панели (либо в preferences, если нужно, могу дать команду для командной строки), поэтому ("com.sun.security.enableCRLDP", "false") не отключит проверку, а просто запретит обращаться в сеть, как если бы CRL были переданы в виде файлов. trustStore - закомментировано (и все, что связано с ним), но оно необходимо. |
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
lartok оставлено 14.02.2019(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Евгений Афанасьев  Если проверку цепочки сертификатов надо отключить, то это надо делать в панели (либо в preferences, если нужно, могу дать команду для командной строки), поэтому ("com.sun.security.enableCRLDP", "false") не отключит проверку, а просто запретит обращаться в сеть, как если бы CRL были переданы в виде файлов. trustStore - закомментировано (и все, что связано с ним), но оно необходимо. Можно команду? Обрисую задачу: Надо "POST"-ить ("Get") на внешний web-сервис (SSL GOST2012 - внешний серв такое соединение поддерживает). Веб-сервису доверие 100% (статический IP), проверять сертификат сервера нет необходимости. Какой минимум настроек для такого подключения - или trusted (хранилище доверенных сертификатов) обязательно? Если такого хранилища нет - необходимо создать и импортнуть туда сертификат сервера? Правильны рассуждения? Да и, спасибо за помощь. P.S.:Забыл упомянуть нашу опер.систему - linux. Отредактировано пользователем 14 февраля 2019 г. 13:49:33(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Автор: lartok  Надо "POST"-ить ("Get") на внешний web-сервис (SSL GOST2012 - внешний серв такое соединение поддерживает). Веб-сервису доверие 100% (статический IP), проверять сертификат сервера нет необходимости. Какой минимум настроек для такого подключения - или trusted (хранилище доверенных сертификатов) обязательно? Если такого хранилища нет - необходимо создать и импортнуть туда сертификат сервера? Правильны рассуждения? Да и, спасибо за помощь.
P.S.:Забыл упомянуть нашу опер.систему - linux.
Тогда можно отключить проверку в панели JCP или в командной строке, в trust store положить корневой сертификат (CA) цепочки сервера, чтобы при построении этой цепочки корневой был доверенный на клиенте (да, создать и добавить туда корневой сервера, не сам сертификат сервера). |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Евгений Афанасьев  Автор: lartok  Надо "POST"-ить ("Get") на внешний web-сервис (SSL GOST2012 - внешний серв такое соединение поддерживает). Веб-сервису доверие 100% (статический IP), проверять сертификат сервера нет необходимости. Какой минимум настроек для такого подключения - или trusted (хранилище доверенных сертификатов) обязательно? Если такого хранилища нет - необходимо создать и импортнуть туда сертификат сервера? Правильны рассуждения? Да и, спасибо за помощь.
P.S.:Забыл упомянуть нашу опер.систему - linux.
Тогда можно отключить проверку в панели JCP или в командной строке, в trust store положить корневой сертификат (CA) цепочки сервера, чтобы при построении этой цепочки корневой был доверенный на клиенте (да, создать и добавить туда корневой сервера, не сам сертификат сервера). Можно команду - графического интерфейса в системе нет.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Хранилище должно создаваться под user который будет юзать? Можно хранилище создать на другом компе (с помощью панели) и перенести файл переназначив (chown) user? Напишите пожалуйста команду для консоли для выкл. проверки цепочки.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Автор: lartok  Хранилище должно создаваться под user который будет юзать? Можно хранилище создать на другом компе (с помощью панели) и перенести файл переназначив (chown) user? Напишите пожалуйста команду для консоли для выкл. проверки цепочки. Нет, где угодно, главное, чтобы доступ был к файлу. Да, переносить можно как угодно. <JRE_с_JCP>/bin/java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl/util -key Enable_revocation_default -value false |
|
 2 пользователей поблагодарили Евгений Афанасьев за этот пост.
|
lartok оставлено 15.02.2019(UTC), MaxAlex оставлено 12.08.2020(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Евгений Афанасьев  Автор: lartok  Хранилище должно создаваться под user который будет юзать? Можно хранилище создать на другом компе (с помощью панели) и перенести файл переназначив (chown) user? Напишите пожалуйста команду для консоли для выкл. проверки цепочки. Нет, где угодно, главное, чтобы доступ был к файлу. Да, переносить можно как угодно. <JRE_с_JCP>/bin/java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl/util -key Enable_revocation_default -value false Вот наконец попробовал запустить, в итоге ошибка: Код:GostX509 TrustManagerFactory not available
Необходима ли установка JavaTLS? Или в чем может быть ошибка?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close