Jump to content
Калькуляторы

Работа с ЭЦП с командной строки (бесплатно)

Есть усиленная квалифицированная ЭЦП, которая используется в электронном документообороте, используются ГОСТ-овские алгоритмы.

Нужно сделать документ с открепленной (отсоединенной) подписью.

Сама система ЭД такое делать не умеет.

Крипто-Про использовать буду только от безысходности.

Не посоветуете софт, которым это можно сделать?

У меня есть старая сборка OpenSSL с поддержкой ГОСТ-28147-89, но она с ЭЦП работать не умеет, в ЭЦП есть неподдерживаемые атрибуты.

Стоит ли возиться со сборкой свежего OpenSSL? Или есть что-нибудь более простое и удобное?

Можно под Windows, можно под Linux.

Share this post


Link to post
Share on other sites

Извлечь ЭЦП с помощью P12FromGostCSP и потом использовать ее как хочется.

Или я не понял задачу?

Share this post


Link to post
Share on other sites

Для цифровой подписи нужен только ключ? Зачем там атрибуты сертификата?

Share this post


Link to post
Share on other sites
7 часов назад, alibek сказал:

Нужно сделать документ с открепленной (отсоединенной) подписью.

...

У меня есть старая сборка OpenSSL с поддержкой ГОСТ-28147-89, но она с ЭЦП работать не умеет, в ЭЦП есть неподдерживаемые атрибуты.

 

На сколько я помню, запрос на выемку запрещенных сайтов также подписывается открепленной подписью, и там вроде бы тоже ГОСТ (какой конкретно - хз). Так что есть смысл взять работающую сборку openssl и сделать на ней. Сборку уже гуглить.

Share this post


Link to post
Share on other sites
8 часов назад, alibek сказал:

Стоит ли возиться со сборкой свежего OpenSSL?

Я бы посмотрел что libressl поддерживает, кажется там больше всего.

Share this post


Link to post
Share on other sites
3 часа назад, Andrei сказал:

Извлечь ЭЦП с помощью P12FromGostCSP

Извлекать не надо, ЭЦП уже есть в файле.

 

2 часа назад, vop сказал:

Для цифровой подписи нужен только ключ?

И поддержка алгоритмов шифрования.

 

2 часа назад, TheUser сказал:

Так что есть смысл взять работающую сборку openssl и сделать на ней.

Работающая (с реестром) сборка уже есть, но видимо этого недостаточно.

При попытке использовать извлеченный ЭЦП, например преобразовать в PEM, получаю такую ошибку:

MAC verified OK
Error outputting keys and certificates
140093694572200:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe algorithm:evp_pbe.c:162:TYPE=1.2.840.113549.1.12.1.80
140093694572200:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:87:
140093694572200:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:139:

 

1 час назад, Ivan_83 сказал:

Я бы посмотрел что libressl поддерживает

Спасибо, посмотрю.

Share this post


Link to post
Share on other sites

Находил в свое время где-то на просторах инета нижеприведенную инструкцию. По ней и делал.

 

http://www.openssl.org
tar xzf openssl-1.0.1с.tar.gz
cd openssl-1.0.1с
./config shared zlib enable-rfc3779 --prefix=/gost-ssl
make depend
make
make test
make install

 

Правим конфиг /gost-ssl/ssl/openssl.cnf

В самом верху, первой строкой пишем:

openssl_conf = openssl_def

Далее добавляем в конец:

[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
default_algorithms = ALL
engine_id = gost
dynamic_path = /gost-ssl/lib/engines/libgost.so
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet

 

Далее проверяем работоспособность и наличие GOST (полный путь до openssl обязателен)

 

/gost-ssl/bin/openssl ciphers | tr ":" "\n" | grep GOST

GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

/gost-ssl/bin/openssl ciphers | grep -Fq GOST && echo "OK"
OK
 

подписываем xml файл:

/gost-ssl/bin/openssl smime -sign -in request.xml -out request.bin -signer kontur.pem -outform DER
 

Share this post


Link to post
Share on other sites
12 часов назад, alibek сказал:

Извлекать не надо, ЭЦП уже есть в файле.

Что это за файл, откуда взяли?

Сделайте команду openssl asn1parse -in FILENAME -inform DER для него, уберите все длинные HEX-строки, оставьте только первые 4 столбца.

Share this post


Link to post
Share on other sites
9 минут назад, TheUser сказал:

Что это за файл, откуда взяли?

Экспортировал из токена.

11 минут назад, TheUser сказал:

Сделайте команду

    0:d=0  hl=4 l=3650 cons: SEQUENCE          
    4:d=1  hl=2 l=   1 prim: INTEGER           :03
    7:d=1  hl=4 l=3582 cons: SEQUENCE          
   11:d=2  hl=2 l=   9 prim: OBJECT            :pkcs7-data
   22:d=2  hl=4 l=3567 cons: cont [ 0 ]        
   26:d=3  hl=4 l=3563 prim: OCTET STRING      [HEX DUMP]:<hex>
 3593:d=1  hl=2 l=  59 cons: SEQUENCE          
 3595:d=2  hl=2 l=  31 cons: SEQUENCE          
 3597:d=3  hl=2 l=   7 cons: SEQUENCE          
 3599:d=4  hl=2 l=   5 prim: OBJECT            :sha1
 3606:d=3  hl=2 l=  20 prim: OCTET STRING      [HEX DUMP]:<hex>
 3628:d=2  hl=2 l=  20 prim: OCTET STRING      [HEX DUMP]:<hex>
 3650:d=2  hl=2 l=   2 prim: INTEGER           :07D0

 

Share this post


Link to post
Share on other sites

У меня pfx выглядит так:

# /opt/itcs/bin/openssl asn1parse -in my.pfx -inform DER
    0:d=0  hl=4 l=1213 cons: SEQUENCE
    4:d=1  hl=2 l=   1 prim: INTEGER           :03
    7:d=1  hl=4 l=1108 cons: SEQUENCE
   11:d=2  hl=2 l=   9 prim: OBJECT            :pkcs7-data
   22:d=2  hl=4 l=1093 cons: cont [ 0 ]
   26:d=3  hl=4 l=1089 prim: OCTET STRING      [HEX DUMP]:
 1119:d=1  hl=2 l=  96 cons: SEQUENCE
 1121:d=2  hl=2 l=  80 cons: SEQUENCE
 1123:d=3  hl=2 l=  12 cons: SEQUENCE
 1125:d=4  hl=2 l=   8 prim: OBJECT            :GOST R 34.11-2012 with 512 bit hash
 1135:d=4  hl=2 l=   0 prim: NULL
 1137:d=3  hl=2 l=  64 prim: OCTET STRING      [HEX DUMP]:
 1203:d=2  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:
 1213:d=2  hl=2 l=   2 prim: INTEGER           :0800

 

Выделил хеш-функцию. У меня она отечественная, у Вас - sha1.

Дальше, сделайте dd if=ваш_файл of=obj26 bs=1 skip=30 count=3563 (здесь 30 - это 26 + 4 из строки 26:d=3...)

и потом openssl asn1parse -in obj26 -inform DER

Share this post


Link to post
Share on other sites

Вырезанный фрагмент выглядит так:

    0:d=0  hl=4 l=3559 cons: SEQUENCE          
    4:d=1  hl=4 l= 416 cons: SEQUENCE          
    8:d=2  hl=2 l=   9 prim: OBJECT            :pkcs7-data
   19:d=2  hl=4 l= 401 cons: cont [ 0 ]        
   23:d=3  hl=4 l= 397 prim: OCTET STRING      [HEX DUMP]:<hex>
  424:d=1  hl=4 l=3135 cons: SEQUENCE          
  428:d=2  hl=2 l=   9 prim: OBJECT            :pkcs7-encryptedData
  439:d=2  hl=4 l=3120 cons: cont [ 0 ]        
  443:d=3  hl=4 l=3116 cons: SEQUENCE          
  447:d=4  hl=2 l=   1 prim: INTEGER           :00
  450:d=4  hl=4 l=3109 cons: SEQUENCE          
  454:d=5  hl=2 l=   9 prim: OBJECT            :pkcs7-data
  465:d=5  hl=2 l=  28 cons: SEQUENCE          
  467:d=6  hl=2 l=  10 prim: OBJECT            :pbeWithSHA1And40BitRC2-CBC
  479:d=6  hl=2 l=  14 cons: SEQUENCE          
  481:d=7  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:<hex>
  491:d=7  hl=2 l=   2 prim: INTEGER           :07D0
  495:d=5  hl=4 l=3064 prim: cont [ 0 ]        

Наверное действительно экспортировать нужно было через P12FromGostCSP.

Попробую сделать экспорт еще раз и проверить на готовой сборке OpenSSL.

Share this post


Link to post
Share on other sites

P12FromGostCSP  теперь платный и на год всего.

Share this post


Link to post
Share on other sites
10 минут назад, YuryD сказал:

P12FromGostCSP  теперь платный и на год всего.

Кое-кто сохранил старую версию тулзы и невозбранно пользуется ею.

Приложенный файл сконвертировать из base64 в бинарь. Цифровая подпись производителя имеется.

P12FromGostCSP.txt

Share this post


Link to post
Share on other sites

Да, у меня есть старый архив.

Наверное разработчики утилиты локти себе кусают, что ранее выкладывали ее свободно.

Share this post


Link to post
Share on other sites

 Если бы было всё так радостно :( Не работают старые версии утилит, по крайней мере те, что раньше работали у меня, и торренты тоже всё протухшее. Пришлось покупать, и быстро...

Share this post


Link to post
Share on other sites

Буквально дней десять назад обновлял ЭЦП для реестра.

Утилита отлично работает, выгрузила ключ из реестра (продлевал прямо в ЛК) в файл.

Share this post


Link to post
Share on other sites

 Повезло вам, а мне нет. Вот кусок лога купленной версии

 

Initialization: file path_lic = 'C:\Users\ххх\.P12FromGostCSP\LIC.DAT'
Initialization: date OK

Initialization: check license SN OK

Share this post


Link to post
Share on other sites

Вы тогда уж напишите что у Вас за ключи (тип ключа, удостоверяющий центр), чтобы можно было знать какие ключи не заказывать.

Share this post


Link to post
Share on other sites
4 минуты назад, TheUser сказал:

Вы тогда уж напишите что у Вас за ключи (тип ключа, удостоверяющий центр), чтобы можно было знать какие ключи не заказывать.

 Мой опыт вам не поможет, у нас в конторе своё подразделение по эцп, вот что они умеют, то и делают. Такском.

Share this post


Link to post
Share on other sites

Старая версия P12FromGostCSP

не работает с сертификатами по 2012 госту. Купил платную версию, в p12 выгрузил, а вот

/etc/gost-ssl/bin/openssl  pkcs12 -in ./p12_2017.pfx -out provider.pem -nodes -clcerts
Валит ошибки. Использовал gost engine, но все равно не помогает. На выходе битый файл без приватного ключа
 
root@ubuntu-gost-2012:~/zapret# openssl version
OpenSSL 1.1.0g  2 Nov 2017
root@ubuntu-gost-2012:~/zapret# openssl ciphers | tr ":" "\n" | grep GOST
GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89
root@ubuntu-gost-2012:~/zapret#
 
 

Share this post


Link to post
Share on other sites
23 минуты назад, baide сказал:

Валит ошибки. Использовал gost engine, но все равно не помогает. На выходе битый файл без приватного ключа

А что выводит команда:

openssl asn1parse -in p12_2017.pfx -inform DER

Share this post


Link to post
Share on other sites
3 minutes ago, TheUser said:

А что выводит команда

root@ubuntu-gost-2012:~/zapret# openssl asn1parse -in p12_2018.pfx -inform DER 
    0:d=0  hl=4 l=2999 cons: SEQUENCE          
    4:d=1  hl=2 l=   1 prim: INTEGER           :03
    7:d=1  hl=4 l=2921 cons: SEQUENCE          
   11:d=2  hl=2 l=   9 prim: OBJECT            :pkcs7-data
   22:d=2  hl=4 l=2906 cons: cont [ 0 ]        
   26:d=3  hl=4 l=2902 prim: OCTET STRING      [HEX DUMP]:30820B5230820A2006092A864886F70D010706A0820A1130820A0D02010030820A0606092A864886F70D010701305C06092A864886F70D01050D304F302E06092A864886F70D01050C30210408BF467AC6C712862502020800301106062A850302020A06072A850302021E01301D06062A850302021530130408F77CB986446D602406072A850302021F0180820999C084647488BD4A5DA56D48345C
...
...
...
27750A728A2B34377B1215EF8BB17522485E8F56ABD3971D115C4A976E22AC7C85B61314E302306092A864886F70D01091531160414E6459A248E4E43698D0D644C1548466B0EEE54D1302706092A864886F70D010914311A1E18006300730070005F006500780070006F0072007400650064
 2932:d=1  hl=2 l=  69 cons: SEQUENCE          
 2934:d=2  hl=2 l=  53 cons: SEQUENCE          
 2936:d=3  hl=2 l=  17 cons: SEQUENCE          
 2938:d=4  hl=2 l=   6 prim: OBJECT            :GOST R 34.11-94
 2946:d=4  hl=2 l=   7 prim: OBJECT            :id-GostR3411-94-CryptoProParamSet
 2955:d=3  hl=2 l=  32 prim: OCTET STRING      [HEX DUMP]:A1F918E889BCC3E018ACC476B53BBCF4BBDF7E12BAB43607596E104608FB8AB7
 2989:d=2  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:B23406E7533978A4
 2999:d=2  hl=2 l=   2 prim: INTEGER           :0800

 

Share this post


Link to post
Share on other sites
21 минуту назад, baide сказал:

root@ubuntu-gost-2012:~/zapret# openssl asn1parse -in p12_2018.pfx -inform DER 
...
 2938:d=4  hl=2 l=   6 prim: OBJECT            :GOST R 34.11-94
 2946:d=4  hl=2 l=   7 prim: OBJECT            :id-GostR3411-94-CryptoProParamSet
...

 

Судя по этим строкам, у Вас устаревший ГОСТ. Либо openssl его считает устаревшим.

Как бы то ни было, выше в топике есть пример как с помощью команды dd вытащить из pfx нужный объект. Попробуйте.

 

Тьфу... У вас же openssl не поддерживает GOST94! Слишком новый openssl...

Share this post


Link to post
Share on other sites

 Похоже что да, вот мой, нормально жующий..

OpenSSL 1.0.1e 11 Feb 2013

 

/usr/local/bin/openssl  ciphers | tr ":" "\n" | grep GOST
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

 

Share this post


Link to post
Share on other sites
1 hour ago, YuryD said:

GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

Так у вас 2012гост отсутствует.  С 2001 у меня тоже все работало

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now