metalsoft Posted January 25, 2019 (edited) · Report post Здравствуйте, коллеги. Наверняка кому-то удалось реализовать поддержку GOST R 34.11-94 в openssl? Экспортировал сертификат в помощью купленной только что p12fromgostcsp, результат: root@zapret:/opt/gost-ssl-1.0.1c/bin# ./openssl asn1parse -in /root/p12.pfx -inform DER 0:d=0 hl=4 l=3231 cons: SEQUENCE 4:d=1 hl=2 l= 1 prim: INTEGER :03 7:d=1 hl=4 l=3153 cons: SEQUENCE 11:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-data 22:d=2 hl=4 l=3138 cons: cont [ 0 ] 26:d=3 hl=4 l=3134 prim: OCTET STRING [HEX DUMP]: ... 3164:d=1 hl=2 l= 69 cons: SEQUENCE 3166:d=2 hl=2 l= 53 cons: SEQUENCE 3168:d=3 hl=2 l= 17 cons: SEQUENCE 3170:d=4 hl=2 l= 6 prim: OBJECT :GOST R 34.11-94 3178:d=4 hl=2 l= 7 prim: OBJECT :id-GostR3411-94-CryptoProParamSet 3187:d=3 hl=2 l= 32 prim: OCTET STRING [HEX DUMP]:E61B68... 3221:d=2 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:4AB66C... 3231:d=2 hl=2 l= 2 prim: INTEGER :0800 root@zapret:/opt/gost-ssl-1.0.1c/bin# ./openssl ciphers | tr ":" "\n" | grep GOST GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89 root@zapret:/opt/gost-ssl-1.0.1c/bin# ./openssl pkcs12 -in /root/p12.pfx Enter Import Password: MAC verified OK Bag Attributes localKeyID: 38 D3 06 CA B9 AE 28 8B 8B... subject=/1.2.643.100.3=07805797... -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- Bag Attributes localKeyID: 38 D3 06 CA B9 AE 28 8B 8B... friendlyName: csp_exported Error outputting keys and certificates 140382018086560:error:0609E09C:digital envelope routines:PKEY_SET_TYPE:unsupported algorithm:p_lib.c:239: 140382018086560:error:0606F076:digital envelope routines:EVP_PKCS82PKEY:unsupported private key algorithm:evp_pkey.c:84:TYPE=1.2.643.7.1.1.1.1 root@zapret:/opt/gost-ssl-1.0.1c/bin# Пробовал разные сборки openssl, собирал сам с openssl.org, но результатодин и тот же: unsupported private key algorithm:evp_pkey.c:84:TYPE=1.2.643.7.1.1.1.1 Edited January 25, 2019 by metalsoft Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry Belyavskiy Posted January 25, 2019 · Report post Должно работать либо с МагПро Криптопакетом (www.cryptocom.ru), либо с более современной реализацией openssl Можете в понедельник мне написать, объясню подробнее Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Hawk128 Posted January 25, 2019 · Report post Неделю назад столкнулся с такой же проблемой. На самом деле только МАС подписан GOST94. Для открытия полученного сертификата нужно поставить свежий openssl с GOST2012, т.к. контейнер в этом формате, вот примерно так: # /usr/bin/openssl version OpenSSL 1.1.1 11 Sep 2018 # /usr/bin/openssl ciphers|tr ':' '\n'|grep -i GOST GOST2012-GOST8912-GOST8912 GOST2001-GOST89-GOST89 И отключить проверку МАС: - добавить опцию -nomacver Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
metalsoft Posted January 25, 2019 · Report post Уррааа!!! Заработало!!!! (с) :) Фишка в том, что в openssl-1.1.* выпилена поддержка gost. Пришлось отдельно ставить отсюда: https://github.com/gost-engine/engine За подсказку про -nomacver отдельное спасибо! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
baronzzz Posted February 7, 2019 · Report post Апну тему. Бодаюсь уже второй день, установил openssl 1.1.1a. на CentOS 6.5 32 & 64 bit из исходников. Поддержки ГОСТ2012 тут нет, это понятно. Пытаюсь собрать и установить https://github.com/gost-engine/engine, на тех же системах, выдаёт ошибки: 64bit Цитата [ 72%] Built target test_params [ 74%] Building C object CMakeFiles/gost12sum.dir/gost12sum.c.o [ 76%] Linking C executable bin/gost12sum [ 76%] Built target gost12sum [ 78%] Building C object CMakeFiles/test_keyexpimp.dir/test_keyexpimp.c.o [ 80%] Linking C executable bin/test_keyexpimp [ 80%] Built target test_keyexpimp [ 82%] Building C object CMakeFiles/test_context.dir/test_context.c.o [ 84%] Linking C executable bin/test_context [ 84%] Built target test_context [ 86%] Building C object CMakeFiles/sign.dir/benchmark/sign.c.o [ 88%] Linking C executable bin/sign CMakeFiles/sign.dir/benchmark/sign.c.o: In function `main': /rico/git/engine-master/benchmark/sign.c:150: undefined reference to `clock_gettime' /rico/git/engine-master/benchmark/sign.c:175: undefined reference to `clock_gettime' collect2: выполнение ld завершилось с кодом возврата 1 gmake[2]: *** [bin/sign] Ошибка 1 gmake[1]: *** [CMakeFiles/sign.dir/all] Ошибка 2 gmake: *** [all] Ошибка 2 или 32bit Цитата [ 26%] Built target gost_core [ 28%] Building C object CMakeFiles/gost_engine.dir/e_gost_err.c.o [ 30%] Building C object CMakeFiles/gost_engine.dir/gost_asn1.c.o [ 32%] Building C object CMakeFiles/gost_engine.dir/gost_crypt.c.o [ 34%] Building C object CMakeFiles/gost_engine.dir/gost_ctl.c.o [ 36%] Building C object CMakeFiles/gost_engine.dir/gost_eng.c.o [ 38%] Building C object CMakeFiles/gost_engine.dir/gost_keywrap.c.o [ 40%] Building C object CMakeFiles/gost_engine.dir/gost_params.c.o [ 42%] Building C object CMakeFiles/gost_engine.dir/gost_keyexpimp.c.o cc1: warnings being treated as errors /rico/git/engine/gost_keyexpimp.c: In function ‘gost_tlstree’: /rico/git/engine/gost_keyexpimp.c:234: error: integer constant is too large for ‘long’ type /rico/git/engine/gost_keyexpimp.c:235: error: integer constant is too large for ‘long’ type /rico/git/engine/gost_keyexpimp.c:236: error: integer constant is too large for ‘long’ type /rico/git/engine/gost_keyexpimp.c:237: error: integer constant is too large for ‘long’ type gmake[2]: *** [CMakeFiles/gost_engine.dir/gost_keyexpimp.c.o] Error 1 gmake[1]: *** [CMakeFiles/gost_engine.dir/all] Error 2 gmake: *** [all] Error 2 Что не так ? Какие могут быть еще вариант решения глобальной проблемы (выгрузка реестра ?) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry Belyavskiy Posted February 7, 2019 (edited) · Report post Варианты: 1. Оторвите сборку этого теста 2. Возьмите engine из ветки 1_1_0, там возможны варианты. 3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами. Edited February 7, 2019 by Dmitry Belyavskiy Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
baronzzz Posted February 7, 2019 · Report post 33 минуты назад, Dmitry Belyavskiy сказал: Варианты: 1. Оторвите сборку этого теста 2. Возьмите engine из ветки 1_1_0, там возможны варианты. 3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами. 1. Вообще не понял, поясните 2. Ссылочкой можете поделится ? 3. Интересно. Но крайний вариант. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry Belyavskiy Posted February 7, 2019 · Report post 2 минуты назад, baronzzz сказал: 1. Вообще не понял, поясните 2. Ссылочкой можете поделится ? 3. Интересно. Но крайний вариант. 1. Закомментируйте в CmakeLists.txt сборку benchmark/sign. 2. Там же, просто ветку из git возьмите другую. git checkout openssl_1_1_0. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted February 7, 2019 · Report post 2 часа назад, Dmitry Belyavskiy сказал: 3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами. У вас GOST запилен через ENGINE? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry Belyavskiy Posted February 7, 2019 · Report post 13 минут назад, TheUser сказал: У вас GOST запилен через ENGINE? У нас сертифицированный продукт, включающий реализацию ГОСТ через engine для OpenSSL. OpenSSL несколько патченный. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 7, 2019 · Report post 3 часа назад, baronzzz сказал: /rico/git/engine-master/benchmark/sign.c:150: undefined reference to `clock_gettime' rt либу потеряли в цемейке. list(APPEND CMAKE_REQUIRED_LIBRARIES rt) ... target_link_libraries(ИМЯБИНАРНИКА ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_EXE_LINKER_FLAGS}) 3 часа назад, baronzzz сказал: /rico/git/engine/gost_keyexpimp.c:234: error: integer constant is too large for ‘long’ type Править исходник или искать переключатель ветки на х32/более короткие константы. 1 час назад, Dmitry Belyavskiy сказал: 1. Закомментируйте в CmakeLists.txt сборку benchmark/sign. А не судьба была сразу CMake поправить чтобы rt либу на линухах добавлял? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry Belyavskiy Posted February 7, 2019 · Report post 5 минут назад, Ivan_83 сказал: А не судьба была сразу CMake поправить чтобы rt либу на линухах добавлял? На бегу - слабо :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted February 7, 2019 · Report post 1 час назад, Dmitry Belyavskiy сказал: У нас сертифицированный продукт, включающий реализацию ГОСТ через engine для OpenSSL. OpenSSL несколько патченный. А зачем покупать сертифицированный у вас, если можно взять не менее сертифицированный в Infotecs, который в паблике лежит? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry Belyavskiy Posted February 7, 2019 · Report post Под какие операционки и что именно у Инфотекса лежит в паблике? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 7, 2019 · Report post 2 часа назад, baronzzz сказал: В этом деле не сильно искушен. Знал бы, ессесно подправил бы, чего где. Поэтому и обращаюсь к сообществу... Перекачай/обнови исходник (автор недавно типа пофиксил) и поменяй: target_link_libraries(sign gost_engine gost_core ${OPENSSL_CRYPTO_LIBRARY}) на target_link_libraries(sign gost_engine gost_core ${OPENSSL_CRYPTO_LIBRARY} ${CMAKE_REQUIRED_LIBRARIES}) но вообще, цмейк написан ***ецово, переписать бы его. 3 часа назад, Dmitry Belyavskiy сказал: На бегу - слабо :) 1. list(APPEND CMAKE_REQUIRED_LIBRARIES rt) - оно само себя не добавит куда надо 2. оно нахер не нужно за пределами линукса 3. нафига было пихать сборку всего в один цмейк файл!? 4. полезный код из корня в /src, тесты в /tests и тп, развели помойку. 5. по коду плачет автоформатер, местами сильно 6. ***ецовые типы данных: int->size_t; unsigned char,byte->uint8_t; word32->uint32_t Вот как выглядят цмейки у меня: https://github.com/rozhuk-im/ssdpd/blob/master/CMakeLists.txt хотя думаю тоже не идеал, но хотя бы оно структурировано и читабельно/поддерживаемо. Мало того что нашей крипте не доверяют, вы ещё пишите так, как будто только что из школы и на дворе 1990 год. :( Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dmitry Belyavskiy Posted February 8, 2019 · Report post Про форматирование и раскладку файлов - согласен. Про Cmake - с удовольствием приму патчи. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
baronzzz Posted February 8, 2019 · Report post СПасибо.Попробую Ваши советы. Сиё чудо сразу воткнулось на Centos 7 64bit Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted February 8, 2019 · Report post 8 часов назад, Dmitry Belyavskiy сказал: Про Cmake - с удовольствием приму патчи. Все вы так говорите :) https://savannah.nongnu.org/bugs/index.php?55235 Я редко правлю то, чем не пользуюсь. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
swsn Posted February 14, 2019 · Report post В 25.01.2019 в 11:58, Hawk128 сказал: И отключить проверку МАС: - добавить опцию -nomacver Спасибо. Помогло в случае когда openssl не хотела читать файл pfx ругаясь на неверный пароль. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
reest Posted February 17, 2019 · Report post В 07.02.2019 в 09:55, baronzzz сказал: 1. Вообще не понял, поясните 2. Ссылочкой можете поделится ? 3. Интересно. Но крайний вариант. Меня как то жаба задушила что либо покупать, и пошел другим путем: Взят РУТОКЕН ЭЦП, его воткнуть в сервак, предварительно залив туда закрытый ключ, и все подписи делаю через него, т.е. хардварно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted February 17, 2019 · Report post А вам это всем для РКН нужно или для чего-то ещё? Про РКН вроде бы говорили , что метка времени по факту игнорируется и можно постоянно один и тот же подготовленный запрос слать Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
reest Posted February 17, 2019 · Report post мне не только для РКН. Хотя по поводу метки времени - дык, проще будет, один рутокен модно будет снять. Пригодится в других местах. Спасибо за совет! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted February 17, 2019 · Report post 6 минут назад, reest сказал: мне не только для РКН. Хотя по поводу метки времени - дык, проще будет, один рутокен модно будет снять. Пригодится в других местах. Спасибо за совет! а зачем вам вообще рутокен? ключ кмк экспортируется из носителя и кладется в виде файлика. Использование ключа в USB конечно добавит немного гемороя потенциальным хакерам, но совсем немного, так как обычный дешевый rutoken криптопроцессором не оборудован, и является не более чем тупо носителем приватного ключа , отдаюшимся прямым текстом по паролю ( при каждой операции подписи, ключ в его исходном виде, загружается в ОЗУ операционной системы и в ней используется ) так чтоб операция подписи выполнялась внутри ключа - это минимум уже от версии "рутокен эцп" и выше Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
reest Posted February 17, 2019 · Report post 3 часа назад, LostSoul сказал: Использование ключа в USB конечно добавит немного гемороя потенциальным хакерам, но совсем немного, так как обычный дешевый rutoken криптопроцессором не оборудован, и является не более чем тупо носителем приватного ключа , отдаюшимся прямым текстом по паролю ( при каждой операции подписи, ключ в его исходном виде, загружается в ОЗУ операционной системы и в ней используется ) так чтоб операция подписи выполнялась внутри ключа - это минимум уже от версии "рутокен эцп" и выше Речь и шла именно про РУТОКЕН ЭЦП, имеющий в себе криптопроцессор. Всякие РУТОКЕН С, лайт, ВЕБ не имеют криптопроцессора. Суть проблемы, в том, что бы извлечь ключ в формате PF12, надо отдать 2999р Лисисофту. А ночью пришла жаба, и начала душить ,ведь 2999р надо будет отдавать как минимум через два года сказала, используй рутокен ЭЦП, все операции будут хардварно, и мучиться с опенссл и ГОСТ не надо будет, надо будет просто опенссл натравить на ключ, что делается быстро и без бубна. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted February 17, 2019 · Report post Не знаю кто такой ЛИССофт , но я в УЦ Контур получил вообще на первый год бесплатно , а на второй и последующие года 500р / год. Ключ делают экспортируемым , если попросить. 13 минут назад, reest сказал: мучиться с опенссл и ГОСТ не надо будет, надо будет просто опенссл натравить на ключ мне думается , там ни разу все не просто, а наоборот намного сложнее чем все делать софтварно , работая с ключем из обычного файла. так как Токен ЭЦП это не значит что он все делает внутри "под ключ" , как мне кажется. Там наверняка API от которого скулы сводит и который все равно в openssl должен быть собран Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...