Comments 8
*.pfx
созданный программой КриптоАРМ 5.4, внутри файла сертификаты и приватный ключ. Не могу понять как можно подписать нужный файл используя приватный ключ, который лежит в
*.pfx
. И вообще как можно с помощью GnuTLS подписать файл, если у меня есть только
*.pfx
контейнер с приватным ключом внутри?(вытащить его не получается, если подскажите как буду благодарен)- Насколько я помню, у КриптоПро свой pfx (свой контейнер PKCS#12), который не соответствует требованиям ТК-26. Но я ещё уточню.
Вы можете попробовать создать контейнер PKCS#12 утилитой P12FromGostCSP. - Вытащить приватный ключ и сертификат из контейнера pfx утилитой certtool не составляет труда (раздел статьи — Работа с защищенным контейнером PKCS#12).
- сначала распарсите ваш pfx-файл командой — $certtool --p12-info [--inder] --infile <путь к вашему файлу pfx> --outfile <имя файла для распарсенного контейнера>
- сохраните ваш сертификата и закрытый ключ в файлах. У сертификата и ключа должно быть одно и тоже Friendly name.
- имя ключ и сертификат вы можете получить подпись (раздел Электронная подпись PKCS#7)
P.S. Если у вас сертификат тестовый, то можете прислать pfx мне и я его посмотрю.
certtool
не кладёт email в поле субъект, оно сохраняется почему то в Subject Alternative Name. В то время как мой поставщик требует что бы email был сохранен в поле субъекта вот такE = example@mail.ru
Подскажите как можно решить данную проблему?
Скорее всего вы используете шаблон вида:
email = <адрес почты>
Утилита certtool символическое имя email связывает как раз с расширением Subject Alternative Name, а не адресом почты (атрибутом) для DN. Адрес почты в DN субъекта можно задать, используя в шаблоне (см. раздел - Создание запроса на сертификат ) оператор следующего вида:
dn_oid = "<oid атрибута> <значение атрибута>"
OID атрибута электронной почты для DN имеет значение 1.2.840.113549.1.9.1
Всё что вам теперь надо сделать это добавить в ваш template следующий шаблон:
dn_oid = "1.2.840.113549.1.9.1 <адрес вашей почты>"
вот этот вариант не работает:
certtool --p7-sign --load-certificate usercert.pem --load-privkey privkey.pem --infile example.doc --outfile --inder signed.bin
Да, добавьте в вашей команде опцию --outder (выводить в DER-кодировке):
certtool --p7-sign --load-certificate usercert.pem --load-privkey privkey.pem --infile example.doc --outder --outfile signed.bin
А если у вас подпись в PEM-кодировке, а вам надо DER-кодировку, то можно просто преобразовать:
certtool --p7-info --infile <файл PKCS7 в PEM> --outder --outfile <файл в DER-кодировке>
Аналогично из DER в PEM
Инфраструктура открытых ключей на базе российской криптографии: GnuTLS как альтернатива OpenSSL