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

Уведомление

Icon
Error

7 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline lartok  
#1 Оставлено : 13 февраля 2019 г. 16:34:53(UTC)
lartok

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

Группы: Участники
Зарегистрирован: 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);
}
}

Offline Евгений Афанасьев  
#2 Оставлено : 13 февраля 2019 г. 17:46:50(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Примеры есть в 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)  | Причина: Не указана

Offline lartok  
#3 Оставлено : 14 февраля 2019 г. 9:00:32(UTC)
lartok

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 14 февраля 2019 г. 12:04:53(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Если проверку цепочки сертификатов надо отключить, то это надо делать в панели (либо в preferences, если нужно, могу дать команду для командной строки), поэтому ("com.sun.security.enableCRLDP", "false") не отключит проверку, а просто запретит обращаться в сеть, как если бы CRL были переданы в виде файлов.
trustStore - закомментировано (и все, что связано с ним), но оно необходимо.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
lartok оставлено 14.02.2019(UTC)
Offline lartok  
#5 Оставлено : 14 февраля 2019 г. 13:46:28(UTC)
lartok

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 14 февраля 2019 г. 13:55:12(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: lartok Перейти к цитате

Надо "POST"-ить ("Get") на внешний web-сервис (SSL GOST2012 - внешний серв такое соединение поддерживает). Веб-сервису доверие 100% (статический IP), проверять сертификат сервера нет необходимости. Какой минимум настроек для такого подключения - или trusted (хранилище доверенных сертификатов) обязательно? Если такого хранилища нет - необходимо создать и импортнуть туда сертификат сервера? Правильны рассуждения? Да и, спасибо за помощь.

P.S.:Забыл упомянуть нашу опер.систему - linux.

Тогда можно отключить проверку в панели JCP или в командной строке, в trust store положить корневой сертификат (CA) цепочки сервера, чтобы при построении этой цепочки корневой был доверенный на клиенте (да, создать и добавить туда корневой сервера, не сам сертификат сервера).

Offline lartok  
#7 Оставлено : 14 февраля 2019 г. 13:56:50(UTC)
lartok

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

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

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: Евгений Афанасьев Перейти к цитате
Автор: lartok Перейти к цитате

Надо "POST"-ить ("Get") на внешний web-сервис (SSL GOST2012 - внешний серв такое соединение поддерживает). Веб-сервису доверие 100% (статический IP), проверять сертификат сервера нет необходимости. Какой минимум настроек для такого подключения - или trusted (хранилище доверенных сертификатов) обязательно? Если такого хранилища нет - необходимо создать и импортнуть туда сертификат сервера? Правильны рассуждения? Да и, спасибо за помощь.

P.S.:Забыл упомянуть нашу опер.систему - linux.

Тогда можно отключить проверку в панели JCP или в командной строке, в trust store положить корневой сертификат (CA) цепочки сервера, чтобы при построении этой цепочки корневой был доверенный на клиенте (да, создать и добавить туда корневой сервера, не сам сертификат сервера).



Можно команду - графического интерфейса в системе нет.
Offline lartok  
#8 Оставлено : 14 февраля 2019 г. 14:59:11(UTC)
lartok

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

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

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Хранилище должно создаваться под user который будет юзать? Можно хранилище создать на другом компе (с помощью панели) и перенести файл переназначив (chown) user? Напишите пожалуйста команду для консоли для выкл. проверки цепочки.
Offline Евгений Афанасьев  
#9 Оставлено : 15 февраля 2019 г. 12:08:56(UTC)
Евгений Афанасьев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: 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

thanks 2 пользователей поблагодарили Евгений Афанасьев за этот пост.
lartok оставлено 15.02.2019(UTC), MaxAlex оставлено 12.08.2020(UTC)
Offline lartok  
#10 Оставлено : 26 февраля 2019 г. 13:35:29(UTC)
lartok

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

Группы: Участники
Зарегистрирован: 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? Или в чем может быть ошибка?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
7 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.