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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Павел Чупин  
#1 Оставлено : 10 июня 2022 г. 17:06:47(UTC)
Павел Чупин

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

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

Сказал(а) «Спасибо»: 2 раз
Добрый день.
Бъюсь уже две недели не могу понять что делаю не так. Гугл сильно не ответил на вопрос.
Прошу помощи. Пытаюсь подписать файл.
Цепочку сертификатов читает нормально. Алгоритмы выставлены согласно ключу.
Атрибуты добавлены. Реальный ключ заказчика так же как и тестовый выдает все такую же ошибку.

ru.ysolutions.zsk_integrate_service.exception.SignatureFileException: Private key does not match public key; error codes: [108] 'Private key does not match public key',
at ru.ysolutions.zsk_integrate_service.service.signature.SignatureEncrypteServiceImpl.signatureFile(SignatureEncrypteServiceImpl.java:238) ~[classes/:na]
at ru.ysolutions.zsk_integrate_service.sheduler.kyc.ReportSignatureKYCScheduler.signatureFile(ReportSignatureKYCScheduler.java:87) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84) ~[spring-context-5.3.18.jar:5.3.18]
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.3.18.jar:5.3.18]
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:95) ~[spring-context-5.3.18.jar:5.3.18]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: ru.CryptoPro.CAdES.exception.CAdESException: Private key does not match public key
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source) ~[CAdES.jar:40363-A]
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source) ~[CAdES.jar:40363-A]
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source) ~[CAdES.jar:40363-A]
at ru.ysolutions.zsk_integrate_service.service.signature.SignatureEncrypteServiceImpl.getSign3(SignatureEncrypteServiceImpl.java:753) ~[classes/:na]
at ru.ysolutions.zsk_integrate_service.service.signature.SignatureEncrypteServiceImpl.signatureFile(SignatureEncrypteServiceImpl.java:210) ~[classes/:na]
... 14 common frames omitted
Caused by: ru.CryptoPro.CAdES.exception.CAdESException: Private key does not match public key
... 19 common frames omitted


private byte[] getSign3(byte[] data) throws Exception {
AdESConfig.setDefaultProvider(JCSP.PROVIDER_NAME);
System.setProperty("ru.CryptoPro.reprov.enableCRLDP", "true");
System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.ibm.security.enableCRLDP", "true");

// Создаем CAdES подпись.
CAdESSignature cadesSignature = new CAdESSignature(true);


final DERBMPString at = new DERBMPString("\u001E\u0012\u0004\u001F\u0004>\u00044\u0004?\u00048\u0004A\u00040\u0004=\u0004>");
final org.bouncycastle.asn1.cms.Attribute attr2 = new org.bouncycastle.asn1.cms.Attribute(new ASN1ObjectIdentifier("1.2.643.2.45.1.1.4"), new DERSet(at));

final DERBMPString atSign = new DERBMPString("1.2.643.6.3.1.4");
final org.bouncycastle.asn1.cms.Attribute attr3 = new org.bouncycastle.asn1.cms.Attribute(new ASN1ObjectIdentifier("1.2.643.2.45.1.1.3"), new DERSet(atSign));


final Hashtable<ASN1ObjectIdentifier, org.bouncycastle.asn1.cms.Attribute> attrMap = new Hashtable<>();
final DERBMPString fileName = new DERBMPString("file:hello world.txt");
final org.bouncycastle.asn1.cms.Attribute attr5 = new org.bouncycastle.asn1.cms.Attribute(new ASN1ObjectIdentifier("1.2.643.2.45.1.1.2"), new DERSet(fileName));

final DERSequence fileSignStatus = new DERSequence(new ASN1Encodable[]{new DERBMPString(""), fileName, new DERBMPString("1.2.643.6.3.1.4")});
final org.bouncycastle.asn1.cms.Attribute attr6 = new org.bouncycastle.asn1.cms.Attribute(new ASN1ObjectIdentifier("1.3.6.1.4.1.311.2.1.120"), new DERSet(fileSignStatus));


//attrMap.put(attr1.getAttrType(), attr1);
attrMap.put(attr2.getAttrType(), attr2);
attrMap.put(attr3.getAttrType(), attr3);
attrMap.put(attr5.getAttrType(), attr5);
attrMap.put(attr6.getAttrType(), attr6);

AttributeTable attr = new AttributeTable(attrMap);

cadesSignature.addSigner(JCSP.PROVIDER_NAME
, AlgorithmUtility.keyAlgToDigestOid(privateKeyBank.getAlgorithm())
, JCP.GOST_PARAMS_EXC_2012_256_KEY_OID //AlgorithmUtility.keyAlgToKeyAlgorithmOid(certificateBank.getPublicKey().getAlgorithm())
, privateKeyBank
, chainCertificatesBank
, CAdESType.CAdES_BES
, null
, false
, attr
, null);


// Будущая подпись в виде массива.
ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
cadesSignature.open(signatureStream); // подготовка контекста
cadesSignature.update(data); // вычисление хэш-кода
cadesSignature.close(); // создание подписи с выводом в signatureStream
signatureStream.close();
// Получаем подпись с двумя подписантами в виде массиве.
return signatureStream.toByteArray();
}
Offline Евгений Афанасьев  
#2 Оставлено : 10 июня 2022 г. 20:58:49(UTC)
Евгений Афанасьев

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

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

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

Автор: Павел Чупин Перейти к цитате
Бъюсь уже две недели не могу понять что делаю не так

В этом случае лучше сразу обратиться в техподдержку https://support.cryptopro.ru/

Убедитесь, что в списке chainCertificatesBank первым идет сертификат, соответствующий закрытому ключу privateKeyBank.

Также рекомендуется вместо OID'ов алгоритмов хэширования и ключа в addSigner указать null:
Автор: Павел Чупин Перейти к цитате

cadesSignature.addSigner(JCSP.PROVIDER_NAME
, null // <---
, null // <---
, privateKeyBank
, chainCertificatesBank
, CAdESType.CAdES_BES
, null
, false
, attr
, null);

Отредактировано пользователем 10 июня 2022 г. 21:00:51(UTC)  | Причина: Не указана

Offline Павел Чупин  
#3 Оставлено : 12 июня 2022 г. 20:46:25(UTC)
Павел Чупин

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

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

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

Автор: Павел Чупин Перейти к цитате
Бъюсь уже две недели не могу понять что делаю не так

В этом случае лучше сразу обратиться в техподдержку https://support.cryptopro.ru/

Убедитесь, что в списке chainCertificatesBank первым идет сертификат, соответствующий закрытому ключу privateKeyBank.

Также рекомендуется вместо OID'ов алгоритмов хэширования и ключа в addSigner указать null:
Автор: Павел Чупин Перейти к цитате

cadesSignature.addSigner(JCSP.PROVIDER_NAME
, null // <---
, null // <---
, privateKeyBank
, chainCertificatesBank
, CAdESType.CAdES_BES
, null
, false
, attr
, null);


Добрый день. Да уже разобрался. Взял код из проверки вытащил к себе и в дебаге прошел. Понял что он берет первый попавшийся в цепочке. Выглядит как костыльное программирование со стороны разработчика либы. Неужели не могли проверять циклом или видимо где то есть жёсткие требования на это, чего я ненашел.
Во общем лекарство такое:
1. В цепочку сертификатов первым выкладываем сертификат ключа.
2. Далее рутовый добавляем в caserts и начинает работать. Не понятно только выкладываем тока рут в caserts или и промежуточные тоже.

Подскажите еще как мне задать алгоритм подписи signature 1.2.643.7.1.1.1.1 куда его нужно передать? Во втором параметре с ключа он берет 1.2.643.7.1.1.6.1 и как следствие в файл в content -> signerinfos -> signatureAigorithm выкладывает 1.2.643.7.1.1.6.1 а не 1.2.643.7.1.1.1.1, ну и как следствие как я понимаю подпись будет не корректна. При этом алгоритм хэша берет корректно 1.2.643.7.1.1.2.2.


Offline Евгений Афанасьев  
#4 Оставлено : 12 июня 2022 г. 22:41:16(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
"В цепочку сертификатов первым выкладываем сертификат ключа." - спасибо за замечания, поправим.
"Не понятно только выкладываем тока рут в caserts или и промежуточные тоже." - корневой должен быть в cacerts, промежуточный можно положить туда же или передавать в addSigner.

"Подскажите еще как мне задать алгоритм подписи signature 1.2.643.7.1.1.1.1 куда его нужно передать? Во втором параметре с ключа он берет 1.2.643.7.1.1.6.1 и как следствие в файл в content -> signerinfos -> signatureAigorithm выкладывает 1.2.643.7.1.1.6.1 а не 1.2.643.7.1.1.1.1, ну и как следствие как я понимаю подпись будет не корректна. При этом алгоритм хэша берет корректно 1.2.643.7.1.1.2.2." - подпись корректна, но не все системы принимают такую комбинацию OID'ов. В более поздних версиях OID зафиксирован - OID алгоритма ключа подписи (в JCP 2.0.41664-A от 2020-05-12 и выше).
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Павел Чупин оставлено 13.06.2022(UTC)
Offline Павел Чупин  
#5 Оставлено : 13 июня 2022 г. 6:15:47(UTC)
Павел Чупин

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

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

Сказал(а) «Спасибо»: 2 раз
Евгений, спасибо за обратную связь. На протяжении этих двух мучительных недель завести хотя бы на уровне работы не у кого было получить обратной связи.
У меня осталось несколько не понимай, возможно они связаны с тем что у меня нет ТЗ со стороны приемщика моей подписи и ее проверяющей стороны и не много не понимания самой логической составляющей механизма подписи.
Я реализовываю подпись для portal5.cbr.ru и явного описания не нашел для требований к атрибутам. Разбираюсь путем анализа в дебаге переданной корректной подписи заказчика, подписанной через Крипто АРМ.

Вопросы остались следующие:
1. По вашему каменту выше я не совсем понял как мне все таки в content -> signerinfos -> signatureAigorithm получить значение 1.2.643.7.1.1.1.1, я использую java-csp-5.0.40363-A, возможно нужно взять версию повыше, сориентируйте какую? Или нужно как то извратиться и через какой либо метод явно передать, подскажите?
2. После подписи в атрибутах у меня создается атрибут с типом 1.2.840.113549.1.9.52 по умолчанию. Я не совсем понимаю что он значит и если привести значение к строке, то там какие то "кракозябры", при этом в целевой валидной подписи данный атрибут отсутствует. Собственно вопрос как можно его исключить?
3. В отличии от параметра из п.2 в моей подписи, в реальной есть параметр с типом 1.2.643.2.45.1.1.4 но совершенно не ясно что это такое и откуда его необходимо взять. При попытке привести к строке в параметре какие-то символы не понятные. Как понять что такое тип 1.2.643.2.45.1.1.4? Это единственный параметр который по поиску в гугле не удалось распознать по его OID.

Значение в стринге: >4?8A0=>
Значение в байтах: [30, 18, 4, 31, 4, 62, 4, 52, 4, 63, 4, 56, 4, 65, 4, 48, 4, 61, 4, 62]
Debag.JPG (50kb) загружен 7 раз(а).

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

Offline Павел Чупин  
#6 Оставлено : 13 июня 2022 г. 13:55:56(UTC)
Павел Чупин

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

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

Сказал(а) «Спасибо»: 2 раз
Взял версию 5.0.42119-A и все начало заполнятся корректно.

Остался только вопрос в атрибуте 1.2.840.113549.1.9.52 на сколько его наличие будет критично при проверке.
Offline Павел Чупин  
#7 Оставлено : 14 июня 2022 г. 17:37:54(UTC)
Павел Чупин

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
"В цепочку сертификатов первым выкладываем сертификат ключа." - спасибо за замечания, поправим.
"Не понятно только выкладываем тока рут в caserts или и промежуточные тоже." - корневой должен быть в cacerts, промежуточный можно положить туда же или передавать в addSigner.

"Подскажите еще как мне задать алгоритм подписи signature 1.2.643.7.1.1.1.1 куда его нужно передать? Во втором параметре с ключа он берет 1.2.643.7.1.1.6.1 и как следствие в файл в content -> signerinfos -> signatureAigorithm выкладывает 1.2.643.7.1.1.6.1 а не 1.2.643.7.1.1.1.1, ну и как следствие как я понимаю подпись будет не корректна. При этом алгоритм хэша берет корректно 1.2.643.7.1.1.2.2." - подпись корректна, но не все системы принимают такую комбинацию OID'ов. В более поздних версиях OID зафиксирован - OID алгоритма ключа подписи (в JCP 2.0.41664-A от 2020-05-12 и выше).



Евгений, добрый день.
Подскажите что за атрибут 1.2.643.2.45.1.1.4 ни где найти не получается ?
И как можно исключить из подписи атрибут 1.2.840.113549.1.9.52, который заполняется автоматически в версии JCSP 5.0.42119-A?

Offline Евгений Афанасьев  
#8 Оставлено : 14 июня 2022 г. 21:44:12(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
1.2.643.2.45.1.1.4 - https://oid.iitrust.ru/search/?q=1.2.643.2.45
Наверно, надо обратиться к авторам атрибута.

1.2.840.113549.1.9.52 - атрибут согласно https://www.rfc-editor.org/rfc/rfc6211.txt он не должен влиять на процесс проверки, если ПО его не поддерживает.
Offline Павел Чупин  
#9 Оставлено : 15 июня 2022 г. 5:51:57(UTC)
Павел Чупин

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
1.2.643.2.45.1.1.4 - https://oid.iitrust.ru/search/?q=1.2.643.2.45
Наверно, надо обратиться к авторам атрибута.

1.2.840.113549.1.9.52 - атрибут согласно https://www.rfc-editor.org/rfc/rfc6211.txt он не должен влиять на процесс проверки, если ПО его не поддерживает.



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