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

Уведомление

Icon
Error

6 Страницы«<23456>
Опции
К последнему сообщению К первому непрочитанному
Offline Kirill1499  
#31 Оставлено : 24 июля 2018 г. 13:37:56(UTC)
Kirill1499

Статус: Участник

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

Если судить по дебагу, у меня при поиске пустое хранилище (причём это в последней версии JCP).
2018-07-24_13-29-40.png (90kb) загружен 3 раз(а).
2018-07-24_13-34-39.png (85kb) загружен 3 раз(а).
Offline Евгений Афанасьев  
#32 Оставлено : 24 июля 2018 г. 16:08:09(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
У вас используется последняя версия jcp, keyStore - как HDImageStore и для контейнеров, и для хранилища сертификатов, выполняются операции как с сертификатами в хранилище, так и ключами. Какие-то действия после load выполняются, прежде чем перечислить алиасы? В отладке видно именно перед перечислением (aliases()), что список entries пустой (цепочка вызовов: load -> отладка -> aliases)? Инициализация в одном потоке? Ошибка, видимо, присутствует, но воспроизвести ее не удается.

Если нет возможности передать хранилище сертификатов (может, проявилась какая-то ошибка с одним из сертификатов), то не могли бы попробовать воспроизвести с другим, которое можно передать (с кодом)?

Отредактировано пользователем 24 июля 2018 г. 16:22:57(UTC)  | Причина: Не указана

Offline Kirill1499  
#33 Оставлено : 25 июля 2018 г. 12:37:38(UTC)
Kirill1499

Статус: Участник

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

afev, добрый день.
Если честно, я хотел бы вернуться на старую версию JCP.
Возможно, мне всё равно придётся обновиться до последней, но моя изначальная проблема была в том, что у нас есть метод, который шифрует отчёты для трёх КБ.
Этот метод перестал работать для НБКИ, после того как нам прислали сертификат 2012 ГОСТа шифрования. Мы сделали предположение, что дело в OID или в каком-то другом параметре, который надо просто подправить для 2012 года. Я бы хотел продолжить двигаться в этом направлении.

Сейчас, после обновления JCP на локальном компьютере, мне кажется, я никуда не продвинулся.
Так как на старой версии, я хотя бы формировал и отправлял отчёты, которые НБКИ, пока, не может расшифровать, но я их хотя бы отправлял)

Тем более, я уверен, что получу непредсказуемое поведения для других КБ, если обновлю JCP на сервере.
Offline Kirill1499  
#34 Оставлено : 26 июля 2018 г. 15:01:46(UTC)
Kirill1499

Статус: Участник

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

afev, подскажите, пожалуйста, как можно проверить наш метод с помощью тестового контейнера?
Offline Евгений Афанасьев  
#35 Оставлено : 26 июля 2018 г. 16:19:43(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: Kirill1499 Перейти к цитате
afev, подскажите, пожалуйста, как можно проверить наш метод с помощью тестового контейнера?

Создайте тестовый контейнер в jcp или csp (https://cryptopro.ru/certsrv/) с теми параметрами, что, видимо, у сертификата nbki (вы шифруете в их адрес?), зашифруйте своим способом сообщение размером более 1Кб, приложите в архиве исходное сообщение, контейнер, зашифрованное сообщение, я попробую расшифровать с помощью csp/jcp.
Offline Denis1499  
#36 Оставлено : 26 июля 2018 г. 16:39:27(UTC)
Denis1499

Статус: Участник

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

Добрый день!
Я создал тестовый пример, который в 2.038 работает, в 2.039 нет.

Сертификаты перестают выгружаться из хранилища, когда мы инициализируем keyFactory.
Такое ощущение, что в 2.039 по другому надо делать.

Код:

package org.occ.rugateway.jcp;

import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.cert.X509Certificate;
import java.util.Enumeration;

import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;

import ru.CryptoPro.JCP.JCP;

public class TestCrypto {

	public static void main(String[] args) throws Exception {
		new TestCrypto().testRun();
	}

	private KeyManagerFactory gostKeyManagerFactory = null;
	private TrustManagerFactory gostTrustManagerFactory = null;
	private KeyStore gostCertStore;
	
	String gostCertPath = "C:/tst_nbki_39";

	public void testRun() throws Exception {
		initGostCertStore();
		initGostKeyFactory();
		
		Thread.sleep(1000);
		X509Certificate cert = getCertificate("butylkinnbki.cer");
		System.out.println("Cert is " + cert);
	}

	private void initGostCertStore() throws Exception {
		gostCertStore = KeyStore.getInstance(JCP.HD_STORE_NAME, JCP.PROVIDER_NAME);
		logDebug("---gost cert store path (in directory): " + gostCertPath);

		logDebug("---gost cert store certificates----");
		gostCertStore.load(new FileInputStream(new File(gostCertPath)), "aa".toCharArray());
		Enumeration<String> en = gostCertStore.aliases();
		while (en.hasMoreElements()) {
			logDebug("---alias: " + en.nextElement());
		}
		logDebug("------------------------------------");
	}
	
	private void initGostKeyFactory() throws Exception {
		gostTrustManagerFactory = TrustManagerFactory.getInstance("GostX509");
		gostTrustManagerFactory.init(gostCertStore);
		gostKeyManagerFactory = KeyManagerFactory.getInstance("GostX509");
		gostKeyManagerFactory.init(gostCertStore, null);

	}

	
	private X509Certificate getCertificate(String alias) throws Exception {
		return (X509Certificate) gostCertStore.getCertificate(alias);
	}


	private void logDebug(String message) {
		System.out.println(message);
	}

}


Когда я комментарю initGostKeyFactory(); - то сертификат я вижу,
если нет то такой ответ:

Код:

---gost cert store path (in directory): C:/tst_nbki_39
---gost cert store certificates----
июл 26, 2018 4:21:13 PM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 2.0.39738
июл 26, 2018 4:21:13 PM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
---alias: le-13e5010d-8428-4e2f-88eb-df14b3f3bb8a
---alias: butylkinnbki.cer
---alias: оператор нбки - 2018.cer
---alias: cpcacer5
---alias: cpcacer4
---alias: cpcacer3
---alias: cpcacer2
---alias: cpcacer1
---alias: cpcacer0
------------------------------------
июл 26, 2018 4:21:13 PM ru.CryptoPro.ssl.cl_38 <init>
INFO: %% adding as private keys %%
Cert is null


Вот сейчас у нас в этом проблема, не можем получить сертификат из хранилища при переходе с 2.038 на 2.039,
что можете подсказать?
Offline Евгений Афанасьев  
#37 Оставлено : 26 июля 2018 г. 18:46:22(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Предполагаю, что это из-за keyStore.load(null, null), выполняемого в коде менеджера ключей при инициализации (непреднамеренно очишается список сертификатов, поскольку keyStore не HDImageStore, но еще и CertStore). Этот код был добавлен в связи с вводом подсчета попыток ввода неправильного пароля на контейнер. Проверю приведенный пример в связи с этим обстоятельством.

Отредактировано пользователем 26 июля 2018 г. 18:48:36(UTC)  | Причина: Не указана

Offline Denis1499  
#38 Оставлено : 26 июля 2018 г. 18:51:35(UTC)
Denis1499

Статус: Участник

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

Автор: afev Перейти к цитате
Предполагаю, что это из-за keyStore.load(null, null), выполняемого в коде менеджера ключей при инициализации (непреднамеренно очишается список сертификатов, поскольку keyStore не HDImageStore, но еще и CertStore). Этот код был добавлен в связи с вводом подсчета попыток ввода неправильного пароля на контейнер. Проверю приведенный пример в связи с этим обстоятельством.


А у меня keyStore.load(null, null) нет, я там явно файл стрим указываю на хранилище.

Offline Евгений Афанасьев  
#39 Оставлено : 26 июля 2018 г. 19:18:33(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Это в модуле cpSSL, в менеджере ключей, создаваемом по алгоритму GostX509.
Offline Denis1499  
#40 Оставлено : 27 июля 2018 г. 11:00:35(UTC)
Denis1499

Статус: Участник

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

Проблема, что без инициализации gostKeyManagerFactory я не могу ходить во внешний сервис по https, тк мне нужен sslContext.

Если вначале поднимать кей менеджер, напр.

initGostKeyFactory();
initGostCertStore();

то сертификат я вижу, но не могу создать sslContext.

Если, все таки вначале инициализировать gostCertStore и вытянуть из него сертификаты и сохранить отдельно (напр. в Map),
то я могу шифровать, но подключиться к внешнему ресурсу не могу.
Получаю исключение:

Цитата:

javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_4.cl_5: PKIX path validation failed: java.security.GeneralSecurityException: Online certificate verification enabled but com.sun.security.enableCRLDP = false (Sun), com.ibm.security.enableCRLDP = false (Ibm)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
6 Страницы«<23456>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.