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

Уведомление

Icon
Error

16 Страницы<1234>»
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 29 мая 2015 г. 15:06:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Если посмотреть код класса 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)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Добавьте в начало 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)
Сообщений: 3,910
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Сделать расширение критическим, скорее всего, не выйдет. Наверно, придется создать свой экземпляр класса проверки и закомментировать 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 Лента
Пользователи, просматривающие эту тему
16 Страницы<1234>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.