Добрый день (извините если не туда).
Ест XML и его подпись в бинарном формате (ГОСТовская).перерыл кучу всего никак не могу проверить валидность подписи и этого xml.
вот так получил подпись в PEM:
openssl pkcs7 -inform DER -outform PEM -in c1.bin -out c1.pemфайл вот такого формата
-----BEGIN PKCS7-----
MIIaWAYJKoZIhvcNAQcCoIIaSTCCGkUCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG
........
Et8zFAMIHR1AGZWK9+dSgUdQZhtbw9/6zkDqGg==
-----END PKCS7-----
из нее вытащил сертификат:
openssl pkcs7 -print_certs -in c1.pem -out c1.cerформат файла вот такого вида:
subject=emailAddress = ...........
issuer=emailAddress = ...........
-----BEGIN CERTIFICATE-----
MIIHTDCCBvugAwIBAgIKMvG12QAAAAABhDAIBgYqhQMCAgMwggFKMR4wHAYJKoZI
.................
zVOySmH5/HRjkWIh5NIN6JrcNqf0I0bhOKpilRDnWpycwbO0ElQ6baLtZyzphVzz
-----END CERTIFICATE-----subject=street = .......
issuer=emailAddress = .......
-----BEGIN CERTIFICATE-----
MIIOODCCDeegAwIBAgIRAOkZuenyQBag6BFvjoo4D0UwCAYGKoUDAgIDMIIBhzEi
..........
BroqlhydyBtkneXpe17WYrwrgqIOYovMLpxzZJicDkwz3a5dPqdZrrCXjeY=
-----END CERTIFICATE-----из сертификата получил публичный ключ:
openssl x509 -pubkey -noout -in c1.cer > c1_pub.pemвроде все правильно ключ имеет вид
-----BEGIN PUBLIC KEY-----
MGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQMbwzX/8iDw7NXqB
..............
0QT32M0=
-----END PUBLIC KEY-----осталось проверить вот этой командой - в которой публичный ключ, подпись и файл
openssl dgst -engine gost -verify c1_pub.pem -signature c1.bin c1.xmlно результат
engine "gost" set.
Verification Failure
1
пытался другими командами проверить
например так
openssl smime -verify -in c1.bin -noverify -inform der -content c1.xml
но просто выводит на экран xmlбез -engine gost
openssl dgst -verify c1_pub.pem -signature c1.bin c1.xmlпросто пишет
Verification Failure
1ощущение что я или что-то не так делаю или не доделываю какой-то этап.
Проверь ни эта ли бага - https://habr.com/ru/post/450024/
> Проверь ни эта ли бага - https://habr.com/ru/post/450024/из статьи
Для вычисления хэш-значений использовались утилиты следующего вида:1) openssl
$ openssl dgst [–md_gost12_256|-md_gost12_512] <file
у меня выдает ошибку
# openssl dgst –md_gost12_256 c1.xml
–md_gost12_256: No such file or directory
SHA256(c1.xml)= ab1a93888b15545d9cb5f3e74490fd8a3011b48f7b1c01ff93a99c37d5ff09cfполучается он не знает о –md_gost12_256 ? блин
>> Проверь ни эта ли бага - https://habr.com/ru/post/450024/
> из статьи
> Для вычисления хэш-значений использовались утилиты следующего вида:
> 1) openssl
> $ openssl dgst [–md_gost12_256|-md_gost12_512] <file
> у меня выдает ошибку
> # openssl dgst –md_gost12_256 c1.xml
> –md_gost12_256: No such file or directory
> SHA256(c1.xml)= ab1a93888b15545d9cb5f3e74490fd8a3011b48f7b1c01ff93a99c37d5ff09cf
> получается он не знает о –md_gost12_256 ? блинаааа. только сейчас (после публикации заметил) заметил что в статье –md_gost12_256 длинный пробел.
пойдем дальше по статье
Получилось проверить подпись? Если да, то как?
> Получилось проверить подпись? Если да, то как?в общем у меня сработала следующая конструкция, может кому пригодиться:
openssl smime -verify -CAfile c_root.crt -no_check_time -in contract.pdf.1.sig -inform der -content contract.pdf -out /dev/null
если нужно что бы проверялось не истек ли срок годности сертификатов в цепочке, но нужно убрать ключ -no_check_timeесли нужно проверить только подпись, и не проверять сертификаты, то заменить ключи "-CAfile c_root.crt -no_check_time" на "-noverify"
что интересно, если заменить команду "smime" на "cms", то выдает ошибку:
139968788635712:error:2E09A09E:CMS routines:CMS_SignerInfo_verify_content:verification failure:crypto/cms/cms_sd.c:819:
139968788635712:error:2E09D06D:CMS routines:CMS_verify:content verify error:crypto/cms/cms_smime.c:393:
openssl version:
OpenSSL 1.1.0l 10 Sep 2019 (Library: OpenSSL 1.1.0g 2 Nov 2017)
Покажи выводopenssl ciphers | tr ":" "\n" | grep GOST
должно быть
GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89
> Покажи вывод
> openssl ciphers | tr ":" "\n" | grep GOST
> должно быть
> GOST2012-GOST8912-GOST8912
> GOST2001-GOST89-GOST89именно это и выводит букавка в циферку