Pull to refresh

Comments 8

Возникла следующая проблема, есть *.pfx созданный программой КриптоАРМ 5.4, внутри файла сертификаты и приватный ключ.
Не могу понять как можно подписать нужный файл используя приватный ключ, который лежит в *.pfx.
И вообще как можно с помощью GnuTLS подписать файл, если у меня есть только *.pfx контейнер с приватным ключом внутри?(вытащить его не получается, если подскажите как буду благодарен)
  1. Насколько я помню, у КриптоПро свой pfx (свой контейнер PKCS#12), который не соответствует требованиям ТК-26. Но я ещё уточню.
    Вы можете попробовать создать контейнер PKCS#12 утилитой P12FromGostCSP.
  2. Вытащить приватный ключ и сертификат из контейнера 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 <адрес вашей почты>"

Где найти? Конечно в интернете.

Если говорить об oid-ах, которые курирует ТК-26, то их можно найти здесь.

Полезной будет и эта ссылка.

Но поскольку вас интересуют oid-ы аттрибутов отличительное имени субъекта (DN), то можно поискать здесь.

P.S. А некоторые придумывают и свои oid-ы.

Есть какой то способ подписывать файл таким образом что бы результирующий фал был в DER кодировке?
вот этот вариант не работает:
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

Sign up to leave a comment.

Articles