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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline KUKUYARD  
#1 Оставлено : 20 февраля 2021 г. 17:20:57(UTC)
KUKUYARD

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.02.2021(UTC)
Сообщений: 4
Российская Федерация
Откуда: moscow

Добрый день.
Вопрос 1 : Подскажите имеются ли какие учебные инструкции по работе с крипто-про, а точнее некое описание процессов, хаутушек,т .е. как начать как выполнить авторизацию с использование ГОСТ?

Вопрос 2: Существует ли справка, может есть примеры исходных кодов, как использую ваш продукт добиться поставленной задачи, а именно авторизация с использование ГОСТ?

Точнее мне необходимо с использованием языка JAVA (пока в учебных целях) осуществить двухстороннюю и одностороннюю авторизации с использование ГОСТ.

Прощу меня извинить, если это все есть на форуме в разделах:
Общие вопросы или FAQ. В них я не нашел полезной информации по моим вопросам.
Offline Санчир Момолдаев  
#2 Оставлено : 22 февраля 2021 г. 10:47:31(UTC)
Санчир Момолдаев

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

Группы: Модератор, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 757
Российская Федерация

Сказал(а) «Спасибо»: 65 раз
Поблагодарили: 158 раз в 154 постах
Добрый день!
как таковых "хаутушек" нет
есть примеры в samples-sources.jar из состава дистрибутива.
опишите более подробно что вам нужно. авторизация с помощью GOST TLS?
или же использовать авторизацию с помощью плагина и java+jcp&
Техническую поддержку оказываем тут
Наша база знаний
Offline KUKUYARD  
#3 Оставлено : 25 февраля 2021 г. 1:52:02(UTC)
KUKUYARD

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.02.2021(UTC)
Сообщений: 4
Российская Федерация
Откуда: moscow

Пока беру таймаут. ПОодумаю сам. Не нашел пункт удалить сообщение.

Отредактировано пользователем 25 февраля 2021 г. 18:45:26(UTC)  | Причина: Пока беру таймаут. ПОодумаю сам. Не нашел пункт удалить сообщение.

Offline KUKUYARD  
#4 Оставлено : 26 марта 2021 г. 18:32:23(UTC)
KUKUYARD

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.02.2021(UTC)
Сообщений: 4
Российская Федерация
Откуда: moscow


Мне необходимо написать JAVA консольное приложение(клиент) которое бы авторизовывалось с использовать GOST TLS аутентифкации на WEB сервере. Тип аутентифкации односторонняя.
Что было сделано.
1)Получил два сертификата от сервера (gost с длиной ключа 256). рутовый и промежуточный.
2)Установил jcp-2.0.41789 и криптоПРО CSP
2)Нашел в исходниках jcp-2.0.41789 архив с примерамии.
3)Нашел "похожий" на правду код. JTLS_samples/HttpsConnectionCheck.java * Пример подключения к тестовому серверу с * использованием клиентского контейнера *
Сделал проект, добавил все зависимости(временно добавил все JAR от jcp, потом при включенном логировании планирую убрать лишнии jar).Повалились ошибки.
Нашел инструкции в jcp.)Русский человек)
ЖТЯИ.00091-04 33 01. Руководство программиста.pdf (далее- инструкция 1) КриптоПро JCP 97стр
ЖТЯИ.00091-04 33 03. Руководство программиста. JavaTLS.pdf (далее- инструкция 2) 24 стр
4) загрузил рутовый сертификат в хранилище CertificateStore в JCP, наверное с промежуточным мне надо идти логинится на сервер...
Добавить рутовый сертфикат только в CertificateStore. В HDImageStore GOST сертификаты добавлять не получается.

1 Как добавить GOST сертификат в Хранилище HDImageStore?
2 И надо ли мне его туда его добавлять, надо ли добавлять промежуточный?
На основании КОД2 Мне надо добавить GOST сертификат также в KeyTools?
Можете подсказать может надо добавть в крипто ПР CSP сертификат?




Пытаюсь просто считать сертификат из хранилища получаю ошибку.
КОД 1
public class Main {

public static void main(String[] args) {

String trustStorePath = "root.cer";
try {
KeyStore trustStore = KeyStore.getInstance("CertStore");
} catch (KeyStoreException e) {
e.printStackTrace();
}
}
}

java.security.KeyStoreException: CertStore not found
at java.security.KeyStore.getInstance(KeyStore.java:851)
at com.company.Main.main(Main.java:22)
Caused by: java.security.NoSuchAlgorithmException: CertStore KeyStore not available




КОД2
/**
* $RCSfileHttpsConnectionCheck.java,v $ version $Revision: 36379 $ created 28.08.2018
* 16:44 by afevma last modified $Date: 2012-05-30 12:19:27 +0400 (Ср, 30 май 2012)
* $ by $Author: afevma $ (C) ООО Крипто-Про 2004-2018.
* <p/>
* Программный код, содержащийся в этом файле, предназначен для целей обучения.
* Может быть скопирован или модифицирован при условии сохранения абзацев с
* указанием авторства и прав.
* <p/>
* Данный код не может быть непосредственно использован для защиты информации.
* Компания Крипто-Про не несет никакой ответственности за функционирование
* этого кода.
*/
package JTLS_samples;

import javax.net.ssl.*;
import java.io.FileInputStream;
import java.net.URL;
import java.security.KeyStore;

/**
* Пример подключения к тестовому серверу с
* использованием клиентского контейнера.
*
* @author Copyright 2004-2018 Crypto-Pro. All rights reserved.
* @.Version
*/
public class HttpsConnectionCheck {

public static void main(String[] args) throws Exception {

System.setProperty("com.sun.security.enableCRLDP", "true");
URL url = new URL("https://testgost2012st.cryptopro.ru/gost2st.txt");

KeyStore keyStore = KeyStore.getInstance("HDImageStore", "JCP");
keyStore.load(null, null);

KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
kmf.init(keyStore, "1".toCharArray());

KeyStore trustedKeyStore = KeyStore.getInstance("JKS");
trustedKeyStore.load(new FileInputStream("C:/Projects/store.jks"), "123456".toCharArray());

TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustedKeyStore);

SSLContext sslContext = SSLContext.getInstance("GostTLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

SSLSocketFactory socketFactory = sslContext.getSocketFactory();

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(socketFactory);

connection.connect();
TLSUtility.print_content(connection, null);

connection.disconnect();
System.out.println("OK");

}

}


Offline KUKUYARD  
#5 Оставлено : 20 мая 2021 г. 20:59:26(UTC)
KUKUYARD

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.02.2021(UTC)
Сообщений: 4
Российская Федерация
Откуда: moscow

Хочу рассказать в чем был косяк у меня.
Чтобы сделать аутентификацию по ГОСТ.
Мои 2 ошибки.
1. Надо не только правильно поставить JCP но и правильно запускать... (Надо запускать с правами администратора на Windows 10!)
2. Главная ошибка. Без которой я не виделт сертификаты в контейнере....
//http://www.cryptopro.ru/forum2/default.aspx?g=posts&t=18270
////если не добавить принудительно не видит контейнер c сертификатами

Security.addProvider(new ru.CryptoPro.JCP.JCP());
Security.addProvider(new ru.CryptoPro.reprov.RevCheck());
Security.addProvider(new ru.CryptoPro.ssl.Provider());
Security.addProvider(new ru.CryptoPro.Crypto.CryptoProvider());
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");


И весь мой код, может кому пригодится. Он почти весь взят из примера.
Своего писать ни чего не надо. Только для удобства и подстройки под вашу структуру программы..

package com.company;

import ru.CryptoPro.ssl.util.TLSContext;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.Security;

public class ConnectionGOST {
static boolean checkConnection = false;//проверка подключения к системе

public boolean getCheckConnection() {
return checkConnection;
}

public static void setCheckConnection(HttpsURLConnection connection) throws Exception {

if (connection != null) {
checkConnection = true;

} else {
checkConnection = false;
}
}

public ConnectionGOST(String URLPathTrust,String passwordTrust, String URLConnect) {
//http://www.cryptopro.ru/forum2/default.aspx?g=posts&t=18270
////если не добавить принудительно не видит контейнер c сертификатами

Security.addProvider(new ru.CryptoPro.JCP.JCP());
Security.addProvider(new ru.CryptoPro.reprov.RevCheck());
Security.addProvider(new ru.CryptoPro.ssl.Provider());
Security.addProvider(new ru.CryptoPro.Crypto.CryptoProvider());
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");

try {
SSLContext ctx = TLSContext.initClientSSL(
null,
URLPathTrust,
passwordTrust,
null
);

SSLSocketFactory factory = ctx.getSocketFactory();
connect(factory, URLConnect);

} catch (Exception e) {
System.out.println(e.getMessage());
}
}

/**
* Функция устанавливает подключение по заданному адресу
* на основе переданного SSLSocketFactory.
*/
public static void connect (SSLSocketFactory factory,
String urlPath) throws Exception {

URL url = new URL(urlPath);

// Установка нового соединения с заданным адресом.
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

// Задание для него требуемого SSLSocketFactory.
connection.setSSLSocketFactory(factory);
setCheckConnection(connection);

// Вывод на экран содержимого запрошенной страницы.
// printContent(connection);

// Разрыв соединения.
connection.disconnect();

}

/**
* Функция выводит на экран содержимое запрошенной страницы.
*
* @param connection Соединение.
* @throws Exception
*/
private static void printContent (HttpsURLConnection connection)
throws Exception {

if (connection != null) {

printStream(connection.getInputStream());
}

}

/**
* Функция выводит на экран содержимое потока.
*
* @param inputStream Поток.
* @throws Exception
*/
public static void printStream (InputStream inputStream) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(
inputStream, "utf-8"));

String input;
while ((input = br.readLine()) != null) {
System.out.println(input);
}

br.close();

}

}
Ну и собственно сам вызов:


package com.company;

public class Main {

public static void main(String[] args) {
String trustStorePath = "c:\\cert\\cert"; //путь к хрангилищу сертификатов

String trustStorePassword = "12345678"; ВАШ пароль
String urlPath = "https://10.10.20.2020:443"; ваш путь где стоит сервер

ConnectionGOST connectionGOST = new ConnectionGOST(trustStorePath,trustStorePassword,urlPath);
boolean checkConnected = connectionGOST.getCheckConnection();

if(checkConnected) {
System.out.println("Connected GOST true...");
}
if(!checkConnected) {
System.out.println("Connected GOST false...");
}
// write your code here
}


}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.