Перейти к содержимому
Калькуляторы

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

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

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

7 часов назад, alibek сказал:

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

...

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

8 часов назад, alibek сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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 поддерживает

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

12 часов назад, alibek сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

    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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

10 минут назад, YuryD сказал:

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

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

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

P12FromGostCSP.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Initialization: check license SN OK

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Старая версия 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#
 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

23 минуты назад, baide сказал:

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

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

openssl asn1parse -in p12_2017.pfx -inform DER

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

OpenSSL 1.0.1e 11 Feb 2013

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 hour ago, YuryD said:

GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.