Closed sk1nned closed 1 year ago
Добрый день.
Скорее всего сервису-получателю не хватает атрибута Pkcs9SigningTime
.
Проставить его можно так:
CmsSigner cmsSigner = new CmsSigner(gostCert);
// Добавляем время подписания в атрибуты
cmsSigner.SignedAttributes.Add(new Pkcs9SigningTime(DateTime.Now));
signedCms.ComputeSignature(cmsSigner);
Иначе можно сравнить декодированные asn1 сообщения, и посмотреть каких атрибутов не хватает.
Спасибо за наводку, сравнил декодированные сообщения - не хватает атрибута "1.2.840.113549.1.9.16.2.47", кажется это signingCertificateV2. Как-то можно его добавить?
Он добавится сам, если хоть один атрибут в подписи будет. Время — правильный выбор.
2 авг. 2023 г., в 20:18, sk1nned @.***> написал(а):
Спасибо за наводку, сравнил декодированные сообщения - не хватает атрибута "1.2.840.113549.1.9.16.2.47", кажется это signingCertificateV2. Как-то можно его добавить?
— Reply to this email directly, view it on GitHubhttps://github.com/CryptoPro/libcore/issues/29#issuecomment-1662639502, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABVJHE5PNVSFL7O44QPKOG3XTKDURANCNFSM6AAAAAA3BNES4M. You are receiving this because you are subscribed to this thread.Message ID: @.***>
Pkcs9SigningTime пробовал добавлять - не помогает. И да, проверял, "1.2.840.113549.1.9.16.2.47" сам не добавляется.
Видимо связано с https://github.com/CryptoPro/corefx/issues/41 (там же есть решение через Bouncy Castle).
Заметка для себя. Если делать нам - то подсмотреть сборку атрибута можно в
Видимо связано с https://github.com/CryptoPro/corefx/issues/41 (там же есть решение через Bouncy Castle).
Сделал так - заработало. Большое спасибо за помощь!
Видимо связано с CryptoPro/corefx#41 (там же есть решение через Bouncy Castle).
Заметка для себя. Если делать нам - то подсмотреть сборку атрибута можно в
- nuget и ещё
- Rfc3161TimestampToken - видимо в основном декодирование и проверка
- TimestampTokenTests - тут уже есть сборка руками
Точно, спасибо! Крутилось воспоминание об этом запросе в голове, но не смог вспомнить. Магию в capilite мы с тех пор доделали. @Fasjeit, давай у нас в примере сделаем.
Сделал в черновом варианте по аналогии с Pkcs9SigningTime
:
Использование:
// HashAlgorithmName неявно берётся на основе отрытого ключа сертификата
var attr = new PkcsSigningCertificateV2(gostCert);
cmsSigner.SignedAttributes.Add(attr);
или
// HashAlgorithmName задаётся явно
var attr = new PkcsSigningCertificateV2(gostCert, CpHashAlgorithmName.Gost3411_2012_256);
cmsSigner.SignedAttributes.Add(attr);
С виду должно быть похоже на правду. Поддержка Gost3411
+ SHA256/384/512
.
Декодирование пока опустим за ненадобностью, если кому нужно будет - можно будет сделать.
@sk1nned можете попробовать проверить сборки из вложения на вашем сервисе?
https://file.cryptopro.ru/f/7N1NUy1PTKbvpW8XD7nsZ7pLq2j18ip6/LibCore.Linux.2023.8.3.1.nupkg https://file.cryptopro.ru/f/mDnUTVT0slmsZD00I9ajDqr9vgydiLop/LibCore.Windows.2023.8.3.1.nupkg
Проверил - атрибут добавляется, но сервис не принимает подпись.
Ошибка:
Certificate: sn xx issued by GeneralNames:\n 4: 1.2.643.100.4=7707329152,E=uc@tax.gov.ru,1.2.643.100.1=1047707030513,C=RU,ST=77 Москва,L=г. Москва,STREET=ул. Неглинная\\, д. 23,O=Федеральная налоговая служба,CN=Федеральная налоговая служба\n not found; error codes: [13] 'Certificate not found in the certificate list',
Была ошибка в порядке байт в серийном номере сертификата при кодировании - родной метод ms передаёт в Little-Endian, поэтому делаем Reverse перед записью. Теперь серийник сходится.
https://file.cryptopro.ru/f/igpJo7HGd8qjv21VDKiovVYsM0Yn5S3E/LibCore.Linux.2023.8.3.2.nupkg https://file.cryptopro.ru/f/WU2SfxyHU31DRpXT8qwagxv3nlSLKbEH/LibCore.Windows.2023.8.3.2.nupkg
Да, сейчас всё ок.
Отлично, спасибо.
Отставлю открытой, к сл. релизу допишу пример в Readme.
Сейчас делаю SignedCms-подпись как в описании https://github.com/CryptoPro/libcore#signed-cms-detached Но результат фактически разный получается если сравнивать - и по размеру и по содержимому.
Суть проблемы в том, что подпись, полученную через утилиту cptools сервис принимает, а через библиотеку - нет.
Тестирую на версии 2023.7.31.2 под виндой.