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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline ozhdanov  
#1 Оставлено : 20 ноября 2018 г. 12:42:22(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
Добрый день! Подскажите, какие изменение нужно произвести в коде (или в структуре SOAP сообщения) для перехода на новый ГОСТ Р 34.10-2012.
Работаю с примером WSS4J_SignVerifySOAP из пакета поставки JCP.
Код:

/**
 * Copyright 2004-2012 Crypto-Pro. All rights reserved.
 * Этот файл содержит информацию, являющуюся
 * собственностью компании Крипто-Про.
 *
 * Любая часть этого файла не может быть скопирована,
 * исправлена, переведена на другие языки,
 * локализована или модифицирована любым способом,
 * откомпилирована, передана по сети с или на
 * любую компьютерную систему без предварительного
 * заключения соглашения с компанией Крипто-Про.
 */

package wss4j.wss4j1_6_3.tests;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import org.w3c.dom.Document;
import wss4j.manager.SignatureManager;
import wss4j.utility.SpecUtility;
import wss4j.wss4j1_6_3.manager.SOAPXMLSignatureManager_1_6_3;

/**
 * Class for signing & verifying of SOAP XML document.
 */
public class WSS4J_SignVerifySOAP {

	/**
	 * @param args
	 * @throws ClassNotFoundException 
	 * @throws CertificateException 
	 * @throws NoSuchAlgorithmException 
	 * @throws KeyStoreException 
	 * @throws IOException 
	 * @throws FileNotFoundException 
	 * @throws UnrecoverableKeyException 
	 */
	public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, 
	CertificateException, ClassNotFoundException, UnrecoverableKeyException, 
	FileNotFoundException, IOException {

		// Initialize JCP
		SpecUtility.initJCP();
		
		System.out.println("###### Test WSS4J_SignVerifySOAP 1.6.3 is begun ######");
		
		// Load key store
		SignatureManager manager = 
			new SOAPXMLSignatureManager_1_6_3(SpecUtility.DEFAULT_CRYPTO_PROPERTIES, 
				SpecUtility.DEFAULT_ALIAS, SpecUtility.DEFAULT_PASSWORD, SpecUtility.DEFAULT_PASSWORD);
		
		// Sign XML SOAP document
        Document signedDoc = manager.signDoc(manager.getMessage());
        String outputString = org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(signedDoc);
        System.out.println("Signed document: ");
        System.out.println(outputString);
		
        // Verify signature in XML SOAP document
        boolean printCert = true;
        boolean result = manager.verifyDoc(signedDoc, printCert);
        System.out.println("\nVerified: " + result);
		
		System.out.println("###### Test WSS4J_SignVerifySOAP is finished ######");
	}
}
Offline ozhdanov  
#2 Оставлено : 21 ноября 2018 г. 11:54:49(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
Достаточно ли поменять алгоритмы подписи и хэширования?
Код:

//		Reference ref = fac.newReference("#body", fac.newDigestMethod("http://www.w3.org/2001/04/xmldsig-more#gostr3411", null));
		Reference ref = fac.newReference("#body", fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411", null));

		// Make link to signing element
//		SignedInfo si = fac.newSignedInfo( fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
//				 								(C14NMethodParameterSpec) null),
//				 						   fac.newSignatureMethod("http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411", null),
//				 						   		Collections.singletonList(ref));
		SignedInfo si = fac.newSignedInfo( fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE_WITH_COMMENTS,
				(C14NMethodParameterSpec) null),
				fac.newSignatureMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411", null),
				Collections.singletonList(ref));
Offline Евгений Афанасьев  
#3 Оставлено : 21 ноября 2018 г. 12:01:31(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Здравствуйте.
Да, и JCP 2.0 с поддержкой ГОСТ 2012.
Offline ozhdanov  
#4 Оставлено : 21 ноября 2018 г. 12:31:40(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Да, и JCP 2.0 с поддержкой ГОСТ 2012.


Использую JCP 2.0, ключ GOST R 34.10-2012 DH 512 bits.
Произвёл изменения в примере в двух места (на скриншоте выше), получаю ошибку
"java.security.InvalidKeyException: Недопустимый тип ключа"

Может надо где-то явно задать алгоритмы хэширования и подписи помимо нэймспейсов?
Offline Евгений Афанасьев  
#5 Оставлено : 21 ноября 2018 г. 13:24:03(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Приведите, какие алгоритмы передаете, и какая версия JCP (в формате x.x.xxxxx).

Отредактировано пользователем 21 ноября 2018 г. 13:24:38(UTC)  | Причина: Не указана

Offline ozhdanov  
#6 Оставлено : 21 ноября 2018 г. 13:59:26(UTC)
ozhdanov

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Евгений Афанасьев Перейти к цитате
Приведите, какие алгоритмы передаете, и какая версия JCP (в формате x.x.xxxxx).

jcp-2.0.39014
Алгоритм хэширования изменил с "http://www.w3.org/2001/04/xmldsig-more#gostr3411" на "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411"
Алгоритм подписи изменил с "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" на "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411"
Offline Евгений Афанасьев  
#7 Оставлено : 21 ноября 2018 г. 14:30:47(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 715 раз в 675 постах
Автор: ozhdanov Перейти к цитате

jcp-2.0.39014
Алгоритм хэширования изменил с "http://www.w3.org/2001/04/xmldsig-more#gostr3411" на "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411"
Алгоритм подписи изменил с "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" на "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411"

1. Алгоритмы остались прежние - gostr3411 и gostr34102001-gostr3411 (старый ГОСТ), новые есть в классе ru.CryptoPro.JCPxml.Consts и в руководстве программиста тоже:
Код:

/**
 * алгоритм подписи, ГОСТ Р 34.10-2012 (256)
 */
public static final String URN_GOST_SIGN_2012_256 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256";

/**
 * алгоритм хеширования, ГОСТ Р 34.11-2012 (256)
 */
public static final String URN_GOST_DIGEST_2012_256 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256";

/**
 * алгоритм подписи, ГОСТ Р 34.10-2012 (512)
 */
public static final String URN_GOST_SIGN_2012_512 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-512";

/**
 * алгоритм хеширования, ГОСТ Р 34.11-2012 (512)
 */
public static final String URN_GOST_DIGEST_2012_512 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-512";

А Ключ подается, видимо, на новом ГОСТе. Выбирать алгоритм можно по алгоритму закрытого ключа (privateKey.getAlgorithm() - в зависимости от него выбирать константу).
2. Рекомендуем также обновить версию JCP.

Отредактировано пользователем 21 ноября 2018 г. 14:32:07(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
ozhdanov оставлено 21.11.2018(UTC)
Offline ozhdanov  
#8 Оставлено : 21 ноября 2018 г. 14:33:19(UTC)
ozhdanov

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

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

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

jcp-2.0.39014
Алгоритм хэширования изменил с "http://www.w3.org/2001/04/xmldsig-more#gostr3411" на "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411"
Алгоритм подписи изменил с "http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" на "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411"

1. Алгоритмы остались прежние - gostr3411 и gostr34102001-gostr3411 (старый ГОСТ), новые есть в классе ru.CryptoPro.JCPxml.Consts и в руководстве программиста тоже:
Код:

/**
 * алгоритм подписи, ГОСТ Р 34.10-2012 (256)
 */
public static final String URN_GOST_SIGN_2012_256 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256";

/**
 * алгоритм хеширования, ГОСТ Р 34.11-2012 (256)
 */
public static final String URN_GOST_DIGEST_2012_256 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-256";

/**
 * алгоритм подписи, ГОСТ Р 34.10-2012 (512)
 */
public static final String URN_GOST_SIGN_2012_512 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-512";

/**
 * алгоритм хеширования, ГОСТ Р 34.11-2012 (512)
 */
public static final String URN_GOST_DIGEST_2012_512 =
        "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34112012-512";

А Ключ подается, видимо, на новом ГОСТе. Выбирать алгоритм можно по алгоритму закрытого ключа (privateKey.getAlgorithm() - в зависимости от него выбирать константу).
2. Рекомендуем также обновить версию JCP.


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