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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline barshay  
#1 Оставлено : 29 июня 2012 г. 16:35:59(UTC)
barshay

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

Группы: Участники
Зарегистрирован: 10.01.2012(UTC)
Сообщений: 52
Женщина
Откуда: Москва

Здравствуйте!
Подскажите, пожалуйста,
константы "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411" и ="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" указывают на один и тот же алгоритм?

Подписываю SOAP-сообщение с помощью КриптоПро JCP, запрос не принимается на сервере.
Различие между моим запросом и тестовым такие:
- у меня:
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
и
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>

- в примере:
<SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411"/>
и
<DigestMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411"/>
Это же вроде бы просто одно и то же в разных стандартах?
Если в методе подписания просто заменить
fac.newDigestMethod("http://www.w3.org/2001/04/xmldsig-more#gostr3411", null)
на fac.newDigestMethod("urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411", null), валится с ошибкой java.security.NoSuchAlgorithmException: unsupported algorithm

Спасибо.

Отредактировано пользователем 29 июня 2012 г. 16:48:19(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 29 июня 2012 г. 17:04:19(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 583 раз в 554 постах
Здравствуйте.
Да, это одно и то же. Видимо, имя в таком формате не поддерживается в библиотеке (только uri).
Offline Евгений Афанасьев  
#3 Оставлено : 29 июня 2012 г. 17:06:46(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 583 раз в 554 постах
Здравствуйте.
Да, это одно и то же. Видимо, имя в таком формате не поддерживается в библиотеке (только uri). Проверим и обновим на след. неделе.
Offline Евгений Афанасьев  
#4 Оставлено : 2 июля 2012 г. 16:10:09(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 583 раз в 554 постах
Здравствуйте.
Обновили архив и библиотеку (wss4j+jcp). Попробуйте с ней указать алгоритмы
urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411 и urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411.
Offline barshay  
#5 Оставлено : 17 июля 2012 г. 17:36:21(UTC)
barshay

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

Группы: Участники
Зарегистрирован: 10.01.2012(UTC)
Сообщений: 52
Женщина
Откуда: Москва

Да! С новой библиотекой всё работает! Спасибо!
Offline barshay  
#6 Оставлено : 8 августа 2012 г. 13:33:54(UTC)
barshay

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

Группы: Участники
Зарегистрирован: 10.01.2012(UTC)
Сообщений: 52
Женщина
Откуда: Москва

Работает не всё. Как выяснилось, метод verifySecuredMessage класса SOAPXMLSignatureManager_1_6_3 валится при появлении в подписанном xml-е русских символов в данных.
Offline Евгений Афанасьев  
#7 Оставлено : 8 августа 2012 г. 14:36:39(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 583 раз в 554 постах
Какой пример вы используете? XML-файл в UTF-8? Можете привести лог ошибки?

Отредактировано пользователем 8 августа 2012 г. 15:57:47(UTC)  | Причина: Не указана

Offline barshay  
#8 Оставлено : 8 августа 2012 г. 16:33:09(UTC)
barshay

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

Группы: Участники
Зарегистрирован: 10.01.2012(UTC)
Сообщений: 52
Женщина
Откуда: Москва

Пример использую test_jcp_wss4j1_6 скачанный 07.06.2012
Валится на строке:
Document doc = message.getSOAPPart().getEnvelope().getOwnerDocument();
Ошибка: SEVERE: SAAJ0511: Unable to create envelope from given source
StackTrase такой:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source:
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:114)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:70)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:122)
at ru.wss4j1_6_3.manager.SOAPXMLSignatureManager_1_6_3.verifySecuredMessage(SOAPXMLSignatureManager_1_6_3.java:136)
at ru.wss4j1_6_3.manager.SOAPXMLSignatureManager_1_6_3.verifyDoc(SOAPXMLSignatureManager_1_6_3.java:115)
at ru.wss4j1_6_3.tests.forum.ForumTest_gPOST_t4379.main(ForumTest_gPOST_t4379.java:165)
Caused by: javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x12) was found in the element content of the document.

Подписываемый файл абсолютно точно в юникоде.
Offline Евгений Афанасьев  
#9 Оставлено : 8 августа 2012 г. 16:35:45(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 583 раз в 554 постах
Посмотрите в файле SOAPXMLSignatureManager_1_6_3.java - в нем метод verifySecuredMessage вызывается внутри verifyDoc. Вероятно, документ неправильно перекодируется.
Попробуйте оформить метод verifyDoc так:
Код:

public boolean verifyDoc(Document signedDoc, boolean printCert) throws UnsupportedEncodingException {

	String docStr = org.apache.ws.security.util.XMLUtils.PrettyDocumentToString(signedDoc);
        ByteArrayInputStream bi = new ByteArrayInputStream(docStr.getBytes("UTF8"));

	MessageFactory messageFactory = null;
	SOAPMessage sm = null;

	boolean result = false;
		
	try {

		// Create SOAP XML message from string (signed document)
		messageFactory = MessageFactory.newInstance();
		sm = messageFactory.createMessage(null, bi);

		// Verify signature
		result = verifySecuredMessage(sm, printCert);
	} catch (SOAPException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
	return result;
}
Offline barshay  
#10 Оставлено : 9 августа 2012 г. 18:43:42(UTC)
barshay

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

Группы: Участники
Зарегистрирован: 10.01.2012(UTC)
Сообщений: 52
Женщина
Откуда: Москва

да, спасибо, так работает.
Offline Евгений Афанасьев  
#11 Оставлено : 9 августа 2012 г. 19:13:58(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 583 раз в 554 постах
Пример исправим и обновим. Пример не всегда сразу подходит для промышленной эксплуатации - при определенных обстоятельствах преобразование строка->документ покажется лишним - можно создать метод verifySecuredMessage(Document doc, ...), исключить из него message.getSOAPPart().getEnvelope().getOwnerDocument() и передать документ signedDoc из verifyDoc().
Код:

...
private boolean verifySecuredMessage(Document doc, boolean printCert) throws Exception {
...
}

public boolean verifyDoc(Document signedDoc, boolean printCert) {
...
    result = verifySecuredMessage(signedDoc, printCert);
...
}

Отредактировано пользователем 9 августа 2012 г. 19:22:54(UTC)  | Причина: Не указана

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