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

Уведомление

Icon
Error

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

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

Группы: Участники
Зарегистрирован: 10.09.2012(UTC)
Сообщений: 7
Откуда: Санкт-Петербург

Здравствуйте,
Работаю с jdk 1.7.
Создал прокси клиента, используя
Код:
wsimport -s src/test/java -p ru.gosuslugi.smev -d target/classes -extension http://188.254.16.92:7777/gateway/services/SID0003038?wsdl

Написал код:
Код:

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Holder;

import org.apache.xml.security.exceptions.XMLSecurityException;
import org.apache.xml.security.signature.XMLSignatureException;
import org.junit.Test;

import ru.gosuslugi.smev.SignatureTool;
import ru.gosuslugi.smev.SignatureToolService;
import ru.gosuslugi.smev.VerifySignatureRequestType;
import ru.gosuslugi.smev.VerifySignatureResponseType;


public class TestSignature {

	@Test
	public void test_verifySoapMessageExt() {
		
		try {
			MessageFactory mf = MessageFactory.newInstance();
			SOAPMessage message = mf.createMessage();
			SOAPPart soapPart = message.getSOAPPart();  
			           
			//File file = new File("src/test/resources/smev_request.xml");
			File file = new File("src/test/resources/smev_message.xml");
			System.out.println("Message file is " + file.getAbsolutePath());
			
			FileInputStream is = new FileInputStream(file);  
			soapPart.setContent(new StreamSource(is)); 
			        
			//System.out.println(soapMsg2String(message));

			String errorMsg = null;
			long errCode = verifySoapMessageExt(message, false, new Holder<String>(errorMsg));
			if (errCode == 0)
				System.out.println("OK");
			else
				System.out.println("ERROR: " + errorMsg);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static long verifySoapMessageExt(SOAPMessage msg, boolean isCertCheck, Holder<String> errorMsg) 
			throws SOAPException, XMLSignatureException, XMLSecurityException, IOException {

		//SignatureToolService sts = new SignatureToolServiceLocator();
		SignatureToolService sts = new SignatureToolService();
		//SignatureTool st = sts.getSignatureToolPort(new URL("http://188.254.16.92:7777/gateway/services/SID0003038"));
		SignatureTool st = sts.getSignatureToolPort();
		//VerifySignatureRequestType vsrType = new VerifySignatureRequestType(msg, false, "http://smev.gosuslugi.ru/actors/smev");
		VerifySignatureRequestType vsrType = new VerifySignatureRequestType();
		vsrType.setMessage(soapMsg2String(msg));
		vsrType.setActor("http://smev.gosuslugi.ru/actors/smev");
		vsrType.setIsCertCheck(isCertCheck);
		VerifySignatureResponseType result = st.verifySignature(vsrType);
		//System.out.println(result.getError().getErrorCode() + ", " + result.getError().getErrorMessage());
		errorMsg.value = result.getError().getErrorMessage();
		return result.getError().getErrorCode();

	}
	
	public static String soapMsg2String(SOAPMessage msg) 
			throws SOAPException, IOException {
		
		ByteArrayOutputStream out = new ByteArrayOutputStream(); 
		msg.writeTo(out); 
		return new String(out.toByteArray(), "UTF-8");
	}
}

При выполнении метода test_verifySoapMessageExt() как UnitTest получаю в сроке
Код:
VerifySignatureResponseType result = st.verifySignature(vsrType);

ошибку
Код:
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.UnknownHostException: d00smevapp01

Что здесь не так?

Игорь.
Offline igortche  
#2 Оставлено : 14 сентября 2012 г. 23:18:06(UTC)
igortche

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

Группы: Участники
Зарегистрирован: 10.09.2012(UTC)
Сообщений: 7
Откуда: Санкт-Петербург

Прописал в hosts запись
188.254.16.92 d00smevapp01
Помогло, но выглядит как-то не спортивно. Нельзя ли как-то в коде параметром правильный url подставлять?
Offline Евгений Афанасьев  
#3 Оставлено : 15 сентября 2012 г. 2:34:45(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
1) Не заметил в коде использования jcp или jtls;
2) вопрос, на мой взгляд, не соответствует тематике форума.

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

Offline Евгений Афанасьев  
#4 Оставлено : 15 сентября 2012 г. 13:40:56(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
.

Отредактировано пользователем 15 сентября 2012 г. 13:52:08(UTC)  | Причина: Не указана

Offline igortche  
#5 Оставлено : 18 сентября 2012 г. 18:15:02(UTC)
igortche

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

Группы: Участники
Зарегистрирован: 10.09.2012(UTC)
Сообщений: 7
Откуда: Санкт-Петербург

afev написал:
Здравствуйте.
1) Не заметил в коде использования jcp или jtls;
2) вопрос, на мой взгляд, не соответствует тематике форума.

убрал из кода часть, подписавающую soap-пакеты (jcp). По ней отдельный вопрос: http://www.cryptopro.ru/forum2/...s&m=31273&#31273

Отредактировано пользователем 18 сентября 2012 г. 21:11:30(UTC)  | Причина: Не указана

Offline slavb18  
#6 Оставлено : 21 декабря 2013 г. 12:23:34(UTC)
slavb18

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

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

пример подстановки URL сервиса для того чтобы не иметь несколько копий wsdl на каждый сервис:

public VerifySignatureResponseType checkSignature(String serviceURL, String msg){
// Используем веб-клиент СМЭВ.
SignatureToolService sts = new SignatureToolService();

// Задаем адрес тестового сервиса.
SignatureTool st = sts.getSignatureToolPort();
((BindingProvider) st).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, serviceURL);

// Передаем документ, при этом зарещаем проверять сертификат.
VerifySignatureRequestType vsrType = new VerifySignatureRequestType();
vsrType.setMessage(msg);
vsrType.setIsCertCheck(false);
vsrType.setActor("http://smev.gosuslugi.ru/actors/smev");

VerifySignatureResponseType result = st.verifySignature(vsrType);
return result;


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