metalsoft Posted January 25, 2019 Posted January 25, 2019 (edited) Здравствуйте, коллеги. Наверняка кому-то удалось реализовать поддержку 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
Dmitry Belyavskiy Posted January 25, 2019 Posted January 25, 2019 Должно работать либо с МагПро Криптопакетом (www.cryptocom.ru), либо с более современной реализацией openssl Можете в понедельник мне написать, объясню подробнее Вставить ник Quote
Hawk128 Posted January 25, 2019 Posted January 25, 2019 Неделю назад столкнулся с такой же проблемой. На самом деле только МАС подписан 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
metalsoft Posted January 25, 2019 Author Posted January 25, 2019 Уррааа!!! Заработало!!!! (с) :) Фишка в том, что в openssl-1.1.* выпилена поддержка gost. Пришлось отдельно ставить отсюда: https://github.com/gost-engine/engine За подсказку про -nomacver отдельное спасибо! Вставить ник Quote
baronzzz Posted February 7, 2019 Posted February 7, 2019 Апну тему. Бодаюсь уже второй день, установил 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
Dmitry Belyavskiy Posted February 7, 2019 Posted February 7, 2019 (edited) Варианты: 1. Оторвите сборку этого теста 2. Возьмите engine из ветки 1_1_0, там возможны варианты. 3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами. Edited February 7, 2019 by Dmitry Belyavskiy Вставить ник Quote
baronzzz Posted February 7, 2019 Posted February 7, 2019 33 минуты назад, Dmitry Belyavskiy сказал: Варианты: 1. Оторвите сборку этого теста 2. Возьмите engine из ветки 1_1_0, там возможны варианты. 3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами. 1. Вообще не понял, поясните 2. Ссылочкой можете поделится ? 3. Интересно. Но крайний вариант. Вставить ник Quote
Dmitry Belyavskiy Posted February 7, 2019 Posted February 7, 2019 2 минуты назад, baronzzz сказал: 1. Вообще не понял, поясните 2. Ссылочкой можете поделится ? 3. Интересно. Но крайний вариант. 1. Закомментируйте в CmakeLists.txt сборку benchmark/sign. 2. Там же, просто ветку из git возьмите другую. git checkout openssl_1_1_0. Вставить ник Quote
TheUser Posted February 7, 2019 Posted February 7, 2019 2 часа назад, Dmitry Belyavskiy сказал: 3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами. У вас GOST запилен через ENGINE? Вставить ник Quote
Dmitry Belyavskiy Posted February 7, 2019 Posted February 7, 2019 13 минут назад, TheUser сказал: У вас GOST запилен через ENGINE? У нас сертифицированный продукт, включающий реализацию ГОСТ через engine для OpenSSL. OpenSSL несколько патченный. Вставить ник Quote
Ivan_83 Posted February 7, 2019 Posted February 7, 2019 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
Dmitry Belyavskiy Posted February 7, 2019 Posted February 7, 2019 5 минут назад, Ivan_83 сказал: А не судьба была сразу CMake поправить чтобы rt либу на линухах добавлял? На бегу - слабо :) Вставить ник Quote
TheUser Posted February 7, 2019 Posted February 7, 2019 1 час назад, Dmitry Belyavskiy сказал: У нас сертифицированный продукт, включающий реализацию ГОСТ через engine для OpenSSL. OpenSSL несколько патченный. А зачем покупать сертифицированный у вас, если можно взять не менее сертифицированный в Infotecs, который в паблике лежит? Вставить ник Quote
Dmitry Belyavskiy Posted February 7, 2019 Posted February 7, 2019 Под какие операционки и что именно у Инфотекса лежит в паблике? Вставить ник Quote
Ivan_83 Posted February 7, 2019 Posted February 7, 2019 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
Dmitry Belyavskiy Posted February 8, 2019 Posted February 8, 2019 Про форматирование и раскладку файлов - согласен. Про Cmake - с удовольствием приму патчи. Вставить ник Quote
baronzzz Posted February 8, 2019 Posted February 8, 2019 СПасибо.Попробую Ваши советы. Сиё чудо сразу воткнулось на Centos 7 64bit Вставить ник Quote
Ivan_83 Posted February 8, 2019 Posted February 8, 2019 8 часов назад, Dmitry Belyavskiy сказал: Про Cmake - с удовольствием приму патчи. Все вы так говорите :) https://savannah.nongnu.org/bugs/index.php?55235 Я редко правлю то, чем не пользуюсь. Вставить ник Quote
swsn Posted February 14, 2019 Posted February 14, 2019 В 25.01.2019 в 11:58, Hawk128 сказал: И отключить проверку МАС: - добавить опцию -nomacver Спасибо. Помогло в случае когда openssl не хотела читать файл pfx ругаясь на неверный пароль. Вставить ник Quote
reest Posted February 17, 2019 Posted February 17, 2019 В 07.02.2019 в 09:55, baronzzz сказал: 1. Вообще не понял, поясните 2. Ссылочкой можете поделится ? 3. Интересно. Но крайний вариант. Меня как то жаба задушила что либо покупать, и пошел другим путем: Взят РУТОКЕН ЭЦП, его воткнуть в сервак, предварительно залив туда закрытый ключ, и все подписи делаю через него, т.е. хардварно. Вставить ник Quote
LostSoul Posted February 17, 2019 Posted February 17, 2019 А вам это всем для РКН нужно или для чего-то ещё? Про РКН вроде бы говорили , что метка времени по факту игнорируется и можно постоянно один и тот же подготовленный запрос слать Вставить ник Quote
reest Posted February 17, 2019 Posted February 17, 2019 мне не только для РКН. Хотя по поводу метки времени - дык, проще будет, один рутокен модно будет снять. Пригодится в других местах. Спасибо за совет! Вставить ник Quote
LostSoul Posted February 17, 2019 Posted February 17, 2019 6 минут назад, reest сказал: мне не только для РКН. Хотя по поводу метки времени - дык, проще будет, один рутокен модно будет снять. Пригодится в других местах. Спасибо за совет! а зачем вам вообще рутокен? ключ кмк экспортируется из носителя и кладется в виде файлика. Использование ключа в USB конечно добавит немного гемороя потенциальным хакерам, но совсем немного, так как обычный дешевый rutoken криптопроцессором не оборудован, и является не более чем тупо носителем приватного ключа , отдаюшимся прямым текстом по паролю ( при каждой операции подписи, ключ в его исходном виде, загружается в ОЗУ операционной системы и в ней используется ) так чтоб операция подписи выполнялась внутри ключа - это минимум уже от версии "рутокен эцп" и выше Вставить ник Quote
reest Posted February 17, 2019 Posted February 17, 2019 3 часа назад, LostSoul сказал: Использование ключа в USB конечно добавит немного гемороя потенциальным хакерам, но совсем немного, так как обычный дешевый rutoken криптопроцессором не оборудован, и является не более чем тупо носителем приватного ключа , отдаюшимся прямым текстом по паролю ( при каждой операции подписи, ключ в его исходном виде, загружается в ОЗУ операционной системы и в ней используется ) так чтоб операция подписи выполнялась внутри ключа - это минимум уже от версии "рутокен эцп" и выше Речь и шла именно про РУТОКЕН ЭЦП, имеющий в себе криптопроцессор. Всякие РУТОКЕН С, лайт, ВЕБ не имеют криптопроцессора. Суть проблемы, в том, что бы извлечь ключ в формате PF12, надо отдать 2999р Лисисофту. А ночью пришла жаба, и начала душить ,ведь 2999р надо будет отдавать как минимум через два года сказала, используй рутокен ЭЦП, все операции будут хардварно, и мучиться с опенссл и ГОСТ не надо будет, надо будет просто опенссл натравить на ключ, что делается быстро и без бубна. Вставить ник Quote
LostSoul Posted February 17, 2019 Posted February 17, 2019 Не знаю кто такой ЛИССофт , но я в УЦ Контур получил вообще на первый год бесплатно , а на второй и последующие года 500р / год. Ключ делают экспортируемым , если попросить. 13 минут назад, reest сказал: мучиться с опенссл и ГОСТ не надо будет, надо будет просто опенссл натравить на ключ мне думается , там ни разу все не просто, а наоборот намного сложнее чем все делать софтварно , работая с ключем из обычного файла. так как Токен ЭЦП это не значит что он все делает внутри "под ключ" , как мне кажется. Там наверняка API от которого скулы сводит и который все равно в openssl должен быть собран Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.