logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

8 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline 441653683  
#1 Оставлено : 13 февраля 2015 г. 19:36:53(UTC)
441653683

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

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

Добрый день

Создаю аналогичную для Подпись формата XAdES-T в CryptoPro.NET тему.

Скоро утвердят новые форматы ГИС ГМП 1.16.0 (см. инструкцию). В частности, есть такой пункт:

Цитата:
4.3. Подпись под сущностью, запросом
Значение ЭП должно рассчитываться для элемента сущности, запроса и его составных элементов.
В процессе создания электронной подписи информационной системы должны использоваться алгоритмы для расчета хеш-сумм, формирования подписи и каноникализации, приведенные в Таблице № 14. «Алгоритмы формирования подписи».

Таблица № 14. «Алгоритмы формирования подписи»
Наименование URI
Расчет хэш-сумм ГОСТ Р 34.11-94 http://www.w3.org/2001/04/xmldsig-more#gostr3411
Формирования подписи ГОСТ Р 34.10-2001 http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411 , http://www.w3.org/TR/XAdES/
Каноникализация Exclusive XML Canonicalization от 18 July 2002 http://www.w3.org/2001/10/xml-exc-c14n#

Формирование блока ЭП осуществляется в следующем порядке:
...


Не могли бы Вы подсказать, возможно ли сейчас с помощью Crypto Pro JCP поставить подпись XadES-T согласно указанной выше инструкции, если да, то как?

Отредактировано пользователем 13 февраля 2015 г. 19:41:08(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 13 февраля 2015 г. 22:19:18(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 413 раз в 406 постах
Здравствуйте.

Автор: 441653683 Перейти к цитате
Не могли бы Вы подсказать, возможно ли сейчас с помощью Crypto Pro JCP поставить подпись XadES-T согласно указанной выше инструкции, если да, то как?


Нет, невозможно.

Техническую поддержку оказываем тут
Наша база знаний
Offline 441653683  
#3 Оставлено : 16 февраля 2015 г. 10:12:33(UTC)
441653683

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

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

Автор: afev Перейти к цитате
Здравствуйте.

Автор: 441653683 Перейти к цитате
Не могли бы Вы подсказать, возможно ли сейчас с помощью Crypto Pro JCP поставить подпись XadES-T согласно указанной выше инструкции, если да, то как?


Нет, невозможно.

А планируются ли доработки в будущем?
Offline Евгений Афанасьев  
#4 Оставлено : 16 февраля 2015 г. 10:44:23(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 413 раз в 406 постах
Да, в будущем планируется доработать.
Техническую поддержку оказываем тут
Наша база знаний
Offline eagames-ru  
#5 Оставлено : 26 мая 2015 г. 11:29:50(UTC)
eagames-ru

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

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

Поблагодарили: 1 раз в 1 постах
как быть тем, у кого CryptoPro JCP? как нам теперь подписывать сущности ГИС ГМП? старый шлюз отключат 1го июля 2015 года.
а чтобы перейти на новый придеться менять и переписывать весь софт?

Отредактировано пользователем 26 мая 2015 г. 11:50:52(UTC)  | Причина: Не указана

Offline Corzina  
#6 Оставлено : 26 мая 2015 г. 14:58:36(UTC)
Corzina

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 1 раз в 1 постах
Присоединяюсь к вопросу, очень актуален в данный момент, остался всего 1 месяц
Offline johnconnor  
#7 Оставлено : 27 мая 2015 г. 10:12:43(UTC)
johnconnor

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

Группы: Участники
Зарегистрирован: 27.05.2015(UTC)
Сообщений: 6

Добрый день!

Присоединяюсь к вопросу. Не могли бы вы назвать сроки появления версии в которой будет реализована поддержка XadES-T? Возникла та же проблема с форматами ГИС ГМП 1.16. Остался примерно месяц до отключения поддержки старой версии протокола ГИС ГМП и сейчас необходимо понять продолжать использовать продукт КриптоПро JCP и ждать обновления или необходимо искать другие решения.
Offline nick_st  
#8 Оставлено : 28 мая 2015 г. 12:47:44(UTC)
nick_st

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

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

Добрый день! Тоже присоединяюсь к вопросам к компании CryptoPro. Не хотелось бы менять всю платформу.
Offline cross  
#9 Оставлено : 28 мая 2015 г. 12:58:02(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 909
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 145 раз в 134 постах
В течении недели двух мы сделаем пример как создать такую подпись. В целом руками собрать такую подпись использую JCP версии 2.0 можно и сейчас аналогично как делают в ветке с .NET. Более менее высокоуровневое API появится чуть позже. До 1 июля точно предложим решение.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline eagames-ru  
#10 Оставлено : 29 мая 2015 г. 13:35:58(UTC)
eagames-ru

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

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

Поблагодарили: 1 раз в 1 постах
Поддержка ГИС ГМП сообщают, что не включили проверку соответствия подписи XAdES на текущий момент, т.е. на текущий момент хватит XMLdsig и он пройдет валидацию.

По поводу XAdES - заюзал библиотеку https://code.google.com/p/xades4j/
Проблема пока только с TSA сервером, Ответ с PKIStatus.GRANTED не совпадает.

CryptoPro JCP 1.0.46

Код:


KeyingDataProvider kp = new DirectKeyingDataProvider(secContainer.getCertificate(), secContainer.getKey());

XadesSigningProfile prof = new XadesTSigningProfile(kp)
		.withTimeStampTokenProvider(MyTimeStampTokenProvider.class)
		.withDigestEngineProvider(new DefaultMessageDigestProvider() {
			@Override
			public MessageDigest getEngine(String digestAlgorithmURI) throws UnsupportedAlgorithmException {
				try {
					return MessageDigest.getInstance("GOST3411");
				} catch (NoSuchAlgorithmException nsae) {
					throw new UnsupportedAlgorithmException(nsae.getMessage(), digestAlgorithmURI, nsae);
				}
			}
		})
		.withAlgorithmsProviderEx(new DefaultAlgorithmsProviderEx() {
			@Override
			public Algorithm getSignatureAlgorithm(String keyAlgorithmName)
			throws UnsupportedAlgorithmException {
				return new GenericAlgorithm("http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411");
			}

			@Override
			public String getDigestAlgorithmForReferenceProperties() {
				return "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
			}
		});
    
XadesSigner signer = prof.newSigner();

DataObjectDesc obj = new DataObjectReference(textNodeId);
SignedDataObjects dataObjs = new SignedDataObjects(obj).withDataObjectsTimeStamp();

signer.sign(dataObjs, signedNode);

Код:

class MyTimeStampTokenProvider extends DefaultTimeStampTokenProvider {

	@Inject
	public MyTimeStampTokenProvider(MessageDigestEngineProvider messageDigestProvider) {
		super(messageDigestProvider);
	}

	@Override
	protected String getTSAUrl() {
		return "http://testca.cryptopro.ru/tsp/tsp.srf";
	}
}

Отредактировано пользователем 29 мая 2015 г. 13:58:29(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил eagames-ru за этот пост.
oleg_ оставлено 03.06.2015(UTC)
Offline Евгений Афанасьев  
#11 Оставлено : 29 мая 2015 г. 15:06:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 413 раз в 406 постах
Если посмотреть код класса DefaultTimeStampTokenProvider, то в нем есть определение идентификатора алгоритма хеширования, а он, скорее всего, определяется неправильно, либо вообще никак (в списке его нет). Я сделал почти копию этого класса, только добавил свой identifierForDigest:

Код:

private String identifierForDigest(String algName) {
	return JCP.GOST_DIGEST_OID;
}


Подпись создалась.

P.S. Наверно, проще будет использовать JCP.GOST_DIGEST_OID сразу вместо GOST3411.

P.P.S. Еще потребуется добавить в ".withAlgorithmsProviderEx(new DefaultAlgorithmsProviderEx() {":
Код:

public String getDigestAlgorithmForDataObjsReferences() {
	return Consts.URI_GOST_DIGEST;
}

public String getDigestAlgorithmForTimeStampProperties() {
	return Consts.URI_GOST_DIGEST;
}


У генератора запроса штампа можно поставить this.tsRequestGenerator.setCertReq(true); - штамп может быть без сертификата службы штампов, тогда придется добавить этот сертификат в доверенные при проверке подписи.
Для проверки, по аналогии с реализацией TimeStampVerificationProvider для подписи, потребуется добавить свой класс, реализующий TimeStampVerificationProvider, и снова withDigestEngineProvider().

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

Техническую поддержку оказываем тут
Наша база знаний
Offline johnconnor  
#12 Оставлено : 1 июня 2015 г. 14:55:07(UTC)
johnconnor

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

Группы: Участники
Зарегистрирован: 27.05.2015(UTC)
Сообщений: 6

На данынй момент не удается сформировать подпись, т.к. ответ от testca.cryptopro.ru содержит статус REJECTION.
Offline oleg_  
#13 Оставлено : 3 июня 2015 г. 15:38:53(UTC)
oleg_

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

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

Сказал(а) «Спасибо»: 2 раз
Пробовал использовать Ваш фрагмент кода:

Автор: eagames-ru Перейти к цитате


Код:


KeyingDataProvider kp = new DirectKeyingDataProvider(secContainer.getCertificate(), secContainer.getKey());

XadesSigningProfile prof = new XadesTSigningProfile(kp)
		.withTimeStampTokenProvider(MyTimeStampTokenProvider.class)
		.withDigestEngineProvider(new DefaultMessageDigestProvider() {
			@Override
			public MessageDigest getEngine(String digestAlgorithmURI) throws UnsupportedAlgorithmException {
				try {
					return MessageDigest.getInstance("GOST3411");
				} catch (NoSuchAlgorithmException nsae) {
					throw new UnsupportedAlgorithmException(nsae.getMessage(), digestAlgorithmURI, nsae);
				}
			}
		})
		.withAlgorithmsProviderEx(new DefaultAlgorithmsProviderEx() {
			@Override
			public Algorithm getSignatureAlgorithm(String keyAlgorithmName)
			throws UnsupportedAlgorithmException {
				return new GenericAlgorithm("http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411");
			}

			@Override
			public String getDigestAlgorithmForReferenceProperties() {
				return "http://www.w3.org/2001/04/xmldsig-more#gostr3411";
			}
		});
    
XadesSigner signer = prof.newSigner();

DataObjectDesc obj = new DataObjectReference(textNodeId);
SignedDataObjects dataObjs = new SignedDataObjects(obj).withDataObjectsTimeStamp();

signer.sign(dataObjs, signedNode);

Код:

class MyTimeStampTokenProvider extends DefaultTimeStampTokenProvider {

	@Inject
	public MyTimeStampTokenProvider(MessageDigestEngineProvider messageDigestProvider) {
		super(messageDigestProvider);
	}

	@Override
	protected String getTSAUrl() {
		return "http://testca.cryptopro.ru/tsp/tsp.srf";
	}
}


Получаю следующую ошибку:

Код:

xades4j.XAdES4jXMLSigException: The requested algorithm http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411 does not exist. Original Message was: null
	at xades4j.production.SignerBES.createSignature(SignerBES.java:313)
	at xades4j.production.SignerBES.sign(SignerBES.java:159)
	at xades4j.production.SignerBES.sign(SignerBES.java:122)
	at ru.vkabank.CertificateInitializationData.signBody(CertificateInitializationData.java:158)
	at ru.vkabank.SmewMessagesBuilder.writeDocumentSign(SmewMessagesBuilder.java:59)
	at ru.vkabank.SmevAlgorithm.createPaymentDocument(SmevAlgorithm.java:119)
	at ru.vkabank.SmevAlgorithm.execute(SmevAlgorithm.java:67)
	at ru.vkabank.Main.main(Main.java:14)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: org.apache.xml.security.signature.XMLSignatureException: The requested algorithm http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411 does not exist. Original Message was: null
Original Exception was java.lang.NullPointerException
	at org.apache.xml.security.algorithms.SignatureAlgorithm.getSignatureAlgorithmSpi(SignatureAlgorithm.java:160)
	at org.apache.xml.security.algorithms.SignatureAlgorithm.<init>(SignatureAlgorithm.java:135)
	at org.apache.xml.security.algorithms.SignatureAlgorithm.<init>(SignatureAlgorithm.java:106)
	at org.apache.xml.security.signature.SignedInfo.<init>(SignedInfo.java:141)
	at org.apache.xml.security.signature.XMLSignature.<init>(XMLSignature.java:301)
	at xades4j.production.SignerBES.createSignature(SignerBES.java:309)
	... 12 more
  


Не подскажете, как решить проблему с незарегестрированным алгоритмом?
Буду очень благодарен
Offline Евгений Афанасьев  
#14 Оставлено : 3 июня 2015 г. 16:19:06(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 413 раз в 406 постах
Добавьте в начало JCPXMLDSigInit.init().
Техническую поддержку оказываем тут
Наша база знаний
Offline oleg_  
#15 Оставлено : 3 июня 2015 г. 17:20:16(UTC)
oleg_

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: afev Перейти к цитате
Добавьте в начало JCPXMLDSigInit.init().


Уже пробовал, не помогло.
Также пробовал регистрировать через JCEMapper:

Код:

	JCEMapper.register("http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411",
           new JCEMapper.Algorithm("", "GOST3411withGOST3410EL", "Signature"));


Получил ту же ошибку.
Offline johnconnor  
#16 Оставлено : 4 июня 2015 г. 13:33:46(UTC)
johnconnor

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

Группы: Участники
Зарегистрирован: 27.05.2015(UTC)
Сообщений: 6

afev, подскажите, удалось ли выполнить успешно валидацию подписанного сообщения с помощью xades4j?
Offline Inviz  
#17 Оставлено : 4 июня 2015 г. 18:42:35(UTC)
Inviz

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

Группы: Участники
Зарегистрирован: 04.06.2015(UTC)
Сообщений: 10

Поблагодарили: 1 раз в 1 постах
Последние несколько дней тестовый стенд ГИС-ГМП начал ругаться на неправильную ЭЦП.
Судя по всему они таки включили проверку только по XadES-T..

Кто-нибудь нашел рабочее решение для Java?
Offline johnconnor  
#18 Оставлено : 4 июня 2015 г. 19:29:59(UTC)
johnconnor

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

Группы: Участники
Зарегистрирован: 27.05.2015(UTC)
Сообщений: 6

Добился того, что при валидации получаю ошибку: Certificate must have an ExtendedKeyUsage extension marked as critical.
И, действительно, от TSA сервера приходит ответ, где в сертификате Extended Key Usage не помечен как critical.
Подскажите, можно ли изменить ли эту настройку на тестовом TSA сервере КриптоПРО (http://testca.cryptopro.ru/tsp/tsp.srf).

Данная проверка происходит внутри бибилиотеки BouncyCastle, и как я понял, выключить ее невозможно, только, если закомментировать в исходниках и пересобирать, что не желательно.
Offline Евгений Афанасьев  
#19 Оставлено : 4 июня 2015 г. 23:11:32(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 13 раз
Поблагодарили: 413 раз в 406 постах
Сделать расширение критическим, скорее всего, не выйдет. Наверно, придется создать свой экземпляр класса проверки и закомментировать validate (можно сделать свой класс провайдера проверки и скопировать содержимое дефолтного класса из исходников xades4j).

P.S. Не подскажете, где можно проверить документ с подписью?

Отредактировано пользователем 4 июня 2015 г. 23:12:16(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline johnconnor  
#20 Оставлено : 5 июня 2015 г. 10:23:51(UTC)
johnconnor

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

Группы: Участники
Зарегистрирован: 27.05.2015(UTC)
Сообщений: 6

Конкретно validate проходит успешно.


Проверить, вроде бы, можно здесь, но у меня не получилось зарегистрироваться.
http://212.234.160.9/pub/registration.shtml

Проверку выполняем сами библиотекой xades4j. Сейчас столкнулся с ошибкой
xades4j.verification.TimeStampDigestMismatchException: Verification failed for property 'SignatureTimeStamp': input digest and token message imprint mismatch

Основной код проверки
Код:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
CertificateValidationProvider cvp = new MyPKIXCertificateValidationProvider(trustAnchors, false);
XadesVerificationProfile instance = new XadesVerificationProfile(cvp);
instance.withDigestEngineProvider(new DefaultMessageDigestProvider() {
    @Override
    public MessageDigest getEngine(String digestAlgorithmURI) throws UnsupportedAlgorithmException {
        try {
            return MessageDigest.getInstance("GOST3411");
        } catch (NoSuchAlgorithmException nsae) {
            throw new UnsupportedAlgorithmException(nsae.getMessage(), digestAlgorithmURI, nsae);
        }
    }
}).withTimeStampTokenVerifier(new GostTimeStampVerifiecationProvider(cvp, new DefaultMessageDigestProvider() {
    @Override
    public MessageDigest getEngine(String digestAlgorithmURI) throws UnsupportedAlgorithmException {
        try {
            return MessageDigest.getInstance("GOST3411");
        } catch (NoSuchAlgorithmException nsae) {
            throw new UnsupportedAlgorithmException(nsae.getMessage(), digestAlgorithmURI, nsae);
        }
    }
}));
xadesVerifier = instance.newVerifier();

Node finalPaymentNode = doc.getElementsByTagNameNS("http://roskazna.ru/gisgmp/xsd/116/PaymentInfo", "FinalPayment").item(0);
xadesVerifier.verify((Element) ((Element) finalPaymentNode).getElementsByTagNameNS("http://www.w3.org/2000/09/xmldsig#", "Signature").item(0), null);


классы MyPKIXCertificateValidationProvider и GostTimeStampVerifiecationProvider созданы по аналогии с MyTimeStampTokenProvider


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