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

Сборка OpenSSL с поддержкой ГОСТ 2012

Не поделитесь инструкцией по сабжу?

Исходники OpenSSL беру отсюда, версия 1.1.1c.

engine беру отсюда (пакет cprocsp-cpopenssl-~11315-5.x86_64.rpm, в нем есть библиотека libgost.so, а это вроде бы именно то, что нужно).

 

Собираю так: ./config no-shared zlib --prefix=/opt/gostssl

Собирается успешно, OpenSSL запускается и показывает, что поддержка engine есть:

# openssl engine
(dynamic) Dynamic engine loading support

Но как только я пытаюсь подключить engine:

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
gostengy = gost_section

[gost_section]
engine_id = gostengy
dynamic_path = /opt/gostssl/lib/engines-1.1/libgost.so
default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1

то при запуске OpenSSL тут же получаю сообщение, что он не может загрузить so, возможно как раз потому, что я собирал OpenSSL со статической линковкой (без shared libs).

 

Но если я собираю OpenSSL так: ./config shared zlib --prefix=/opt/gostssl

то он собирается, но при запуске пишет, что error while loading shared libraries: libssl.so.1.1.

Эта библиотека в /opt/gostssl/lib/ (как она сама, так и симлинк libssl.so), но видимо OpenSSL пытается искать ее где-то в другом месте, скорее всего в общесистемном.

# ldd openssl 
        linux-vdso.so.1 =>  (0x00007fff43fff000)
        libssl.so.1.1 => not found
        libcrypto.so.1.1 => not found
        libz.so.1 => /lib64/libz.so.1 (0x00007fa234b42000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fa23493e000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa234720000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fa23438c000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fa234d61000)

Видимо путь нужно указывать где-то дополнительно.

На первый взгляд это похоже на баг, хотя и для бага указано, что он уже закрыт.

 

Кстати, по ссылке был предложен костыль, в виде добавления пути /opt/gostssl/lib в файле ld.so.conf.

Это помогло, теперь новая сборка OpenSSL запускается, но engine все равно не загружается:

# ./openssl engine
(dynamic) Dynamic engine loading support
140729665955584:error:25066067:DSO support routines:dlfcn_load:could not load the shared library:crypto/dso/dso_dlfcn.c:119:filename(/opt/gostssl/lib/engines-1.1/libgost.so): libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
140729665955584:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto/dso/dso_lib.c:162:
140729665955584:error:260B6084:engine routines:dynamic_load:dso not found:crypto/engine/eng_dyn.c:414:
140729665955584:error:260BC066:engine routines:int_engine_configure:engine configuration error:crypto/engine/eng_cnf.c:141:section=gost_section, name=dynamic_path, value=/opt/gostssl/lib/engines-1.1/libgost.so
140729665955584:error:0E07606D:configuration file routines:module_run:module initialization error:crypto/conf/conf_mod.c:177:module=engines, value=engine_section, retcode=-1 

 

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


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

Кстати, в пакете cprocsp-cpopenssl-110-64-5.0.11315-5.x86_64.rpm лежит не просто engine, а целиком сборка OpenSSL.

Она даже запускается сразу.

Вот только:

# ./openssl ciphers | tr ":" "\n" | grep -i gost
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

# ./openssl engine
(dynamic) Dynamic engine loading support
(gost) Reference implementation of GOST engine

То ли я что-то не так сделал, то ли на самом деле там не полноценная библиотека, а заглушка.

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


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

попадался пакет с поддержкой ГОСТа готовый, гуглите в Яндексе,  ну и на хабре подробная инструкция по сборке.

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


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

Не выходит что-то каменный цветок.

По ссылке выше на форум КриптоПро беру два дистрибутива:

cprocsp-cpopenssl-110-64-5.0.11315-5.x86_64.rpm — сборка OpenSSL

cprocsp-cpopenssl-110-gost-64-5.0.11315-5.x86_64.rpm — поддержка ГОСТ

Установочные скрипты в обоих пакетах максимально простые — в первом пакете помимо копирования обновляется файл ld.so.conf, а во втором также обновляется файл ld.so.conf плюс обновляется конфигурационный файл openssl.cnf.

В итоге конфигурационный файл получается такой:

HOME                    = .
oid_section             = new_oids

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
gostengy = gost_section

[gost_section]
engine_id = gostengy
dynamic_path = /opt/cprocsp/cp-openssl-1.1.0/lib/amd64/engines/libgostengy.so
default_algorithms = CIPHERS, DIGESTS, PKEY, PKEY_CRYPTO, PKEY_ASN1

Но при запуске выдает то же самое:

# ./openssl engine
(dynamic) Dynamic engine loading support
139803887970048:error:25066067:DSO support routines:dlfcn_load:could not load the shared library:crypto/dso/dso_dlfcn.c:113:filename(/opt/cprocsp/cp-openssl-1.1.0/lib/amd64/engines/libgostengy.so): libcapi20.so.4: cannot open shared object file: No such file or directory
139803887970048:error:25070067:DSO support routines:DSO_load:could not load the shared library:crypto/dso/dso_lib.c:161:
139803887970048:error:260B6084:engine routines:dynamic_load:dso not found:crypto/engine/eng_dyn.c:414:
139803887970048:error:260BC066:engine routines:int_engine_configure:engine configuration error:crypto/engine/eng_cnf.c:141:section=gost_section, name=dynamic_path, value=/opt/cprocsp/cp-openssl-1.1.0/lib/amd64/engines/libgostengy.so
139803887970048:error:0E07606D:configuration file routines:module_run:module initialization error:crypto/conf/conf_mod.c:173:module=engines, value=engine_section, retcode=-1  

Все ссылки, которые я находил, в конечном итоге основывались на этой теме: https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=8544

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


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

37 минут назад, alibek сказал:

libcapi20.so.4: cannot open shared object file: No such file or directory

разве не оно?

 

вроде по этой статье делал:

https://www.easycoding.org/2018/11/28/dobavlyaem-podderzhku-gost-dlya-openssl-v-fedora.html

 

в добавок:

https://github.com/gost-engine/rpm

Изменено пользователем NewUse
дополнил

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


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

gost-engine я находил.

Но не могу собрать, нужен cmake третьей версии, а на CentOS 6 он второй версии.

Я даже rpm находил, но и он требовал glibc версии 2.18, а в репозитории у меня версия младше.

Обновлять подобные пакеты вручную потом боком выйдет, а обновить ядро/ОС не могу, потому что на этом сервере работает СКАТ и менять версию ядра нельзя.

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


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

Скат, ну удачи...(сорри за офтоп)

зачем Вам 1.1?

у меня под центос 6 как раз 101е с гостом, пакет лежит на сайте криптопро...

ну и в чём проблема собрать из сорцов, гост давно в них?

 

Изменено пользователем NewUse

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


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

Делали в виртуалке этим скриптом :

https://github.com/kov-serg/get-cpcert

 

( зы не мучайте скат-а )

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


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

СКАТ я и не трогаю, просто у меня скрипт, забирающий дампы, работает на том же сервере, что и СКАТ.

Вроде бы нашел способ, как поставить glibc 2.14 в отдельный каталог, не заменяя системные библиотеки.

 

Аллилуйя!

# ./openssl engine
(dynamic) Dynamic engine loading support
(gost) Reference implementation of GOST engine

# ./openssl ciphers | tr ":" "\n" | grep -i gost
GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89

 

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


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

Рано радовался.

Конвертировать PFX в PEM не хочет, жалуется на неподдерживаемые атрибуты.

Вроде бы где-то на форуме CryptoPro я читал, что в библиотеке gostengy не реализована генерация ключа, может быть в этом дело.

 

Вообщем я воспользовался предыдущим советом и поставил на виртуальную Ubuntu 14 утилиту get-cpcert.

Утилитой преобразовал ключ в PEM, а уже полученный PEM просто скопировал на сервер, где собран OpenSSL с поддержкой ГОСТ 2012, и уже он спокойно все подписал.

Так что сейчас все работает и до следующего года можно спать спокойно.

 

Посмотрел я, что делает скрипт prepare.sh.

В принципе ничего сверхъестественного, можно было бы и вручную повторить.

Но боюсь, что на CentOS 6 этого не повторить, системные библиотеки слишком старые, а обновлять их нельзя.

 

Запишу на всякий случай, если нужно будет вернуться через год.

1. Собираем из исходников OpenSSL версии не ниже 1.1.1, с поддержкой engine. Добавляем ГОСТовский engine, брать с форума CryptoPro.

2. В принципе можно не собирать OpenSSL, а взять готовую бинарную сборку тут: https://update.cryptopro.ru/support/nginx-gost/bin/185515/ (в пакете 110-64 лежит сам OpenSSL, в пакете 110-gost-64 лежит engine).

3. Ставим скрипт get-cpcert, берем отсюда: https://github.com/kov-serg/get-cpcert

4. Экспортируем ЭЦП в формате CryptoPro на флешку (получится каталог вида folder.000, внутри которого лежат части ключа).

5. Этот каталог скармливаем скрипту get-cpcert и получаем ключ в формате PEM.

6. А уже с этим PEM нормально работает обычный OpenSSL.

7. А чтобы не словить крайне странные глюки, то бинарный файл openssl переименовываем в openssl.real, а вместо него создает враппер с таким содержимым:

#!/bin/sh

EXE=$(readlink -f "$0")
DIR=$(dirname "$EXE")
export LD_LIBRARY_PATH=/srv/erdi/gostssl/lib:/opt/glibc-2.14/lib
exec $DIR/openssl.real $*

А то если в систему подсунуть glibc-2.14, то там начинается нечто феерическое.

У меня сходу слетел часовой пояс (точнее он перестал читаться), перестал работать yum и сломались утилиты, использующие сокеты.

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


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

@alibek , вы зачем над трупом ОС измываетесь? Померло оно. Причем, походу, всем семейством:

http://www.opennet.ru/opennews/art.shtml?num=50861

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


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

Э...

Тут дело не в моих предпочтениях.

СКАТ работает именно на этой версии. И кроме СКАТ на этом сервере ничего нет и не планируется, поэтому и резона никакого нет менять/обновлять ОС.

Забирать и подписывать выгрузки РКН — это всякая попутная мелочь, которую логично запускать на сервере со СКАТом — ресурсов она практически не потребляет, зато все в одном месте.

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


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

3 часа назад, alibek сказал:

Забирать и подписывать выгрузки РКН — это всякая попутная мелочь, которую логично запускать на сервере со СКАТом — ресурсов она практически не потребляет, зато все в одном месте.

Нет, нелогично. Ось старая, ядро со всеми накопленными дырами. Нафига на потенциальные неприятности напрашиваться?

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


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

Какие? СКАТ подключен в разрыв, он прозрачен и невидим на L2. У него вообще нет абонентских или каких других сервисов.

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


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

3 часа назад, alibek сказал:

Какие? СКАТ подключен в разрыв, он прозрачен и невидим на L2. У него вообще нет абонентских или каких других сервисов.

Те секса со сборкой опенссл вам показалось мало?)

Посыл в том, что платформа не поддерживаемая, и сегодня у вас опенссл не собирается, завтра что то ещё.

Тут либо всё переносить на актуальную версию либо вообще внутрь не лазить и делать подпорки на внешних серверах.

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


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

Трафик в СКАТ идёт с DNA интерфейсов через ZC драйвер полностью минуя систему.

А хотелки прикрутить сбоку ещё что то, то тут уже - секас, причем, по моему, лишний в рамках СКАТа.

Сорри за офтоп.

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


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

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

и невидим на L2.

Ага. А к источникам обновлений и, в вашем случае, выгрузкам он через подпространственный туннель телепатирует?

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


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

5 часов назад, Ivan_83 сказал:

Тут либо всё переносить на актуальную версию либо вообще внутрь не лазить и делать подпорки на внешних серверах

В этом смысле да, знал бы заранее, может быть и не стал бы лезть. Но все же получилось, на год хватит, а что через год будет, ещё неизвестно.

 

13 минут назад, snvoronkov сказал:

А к источникам обновлений и, в вашем случае, выгрузкам он через подпространственный туннель телепатирует?

Это все же не абонентские сервисы, доступные извне. Это mgmt-интерфейс для управления, он может быть упрятан за NAT или прокси, входящие подключения на нем не нужны.

Рабочие интерфейсы DNA и они прозрачны.

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


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

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

Это mgmt-интерфейс для управления, он может быть упрятан за NAT или прокси

При некоторых ошибках ядра можно ронять сервер ACK пакетом...

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


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

В 14.06.2019 в 14:55, alibek сказал:

 

4. Экспортируем ЭЦП в формате CryptoPro на флешку (получится каталог вида folder.000, внутри которого лежат части ключа).

 

Это с помощью CSP экспорт делается или покупали новую P12fromCSP? Флешка имеется в виду обычная или рутокен?

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


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

С помощью CSP. Флешка обычная (не токен).

Старая версия P12fromCSP новые ключи не поддерживает (вылетает при экспорте).

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


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

Не получается собрать gost-engine. Собрал OpenSSL из сорцов.

Скрытый текст

root@blackhole:/usr/src/openssl-1.1.1d# ./config --prefix=/usr/local/gost-ssl --openssldir=/usr/local/gost-ssl -Wl,-rpath,/whatever/path

make

make install

Все собирается и работает

root@blackhole:/usr/local/gost-ssl/bin# ./openssl version
OpenSSL 1.1.1d  10 Sep 2019
root@blackhole:/usr/local/gost-ssl/bin# ./openssl engine
(dynamic) Dynamic engine loading support
root@blackhole:/usr/local/gost-ssl/bin#

Но вот долбаный engine собираться не хочет.

Скрытый текст

root@blackhole:/usr/src/GOST/build# cmake -DOPENSSL_ROOT_DIR=/usr/local/gost-ssl/bin -DOPENSSL_LIBRARIES=/usr/local/gost-ssl/lib  -DCMAKE_BUILD_TYPE=Release ..
-- The C compiler identification is GNU 4.9.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
CMake Error at /usr/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:136 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR: Found unsuitable version "1.0.1t", but
  required is at least "1.1.1" (found
  /usr/lib/x86_64-linux-gnu/libssl.so;/usr/lib/x86_64-linux-gnu/libcrypto.so)
Call Stack (most recent call first):
  /usr/share/cmake-3.0/Modules/FindPackageHandleStandardArgs.cmake:341 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.0/Modules/FindOpenSSL.cmake:318 (find_package_handle_standard_args)
  CMakeLists.txt:10 (find_package)


-- Configuring incomplete, errors occurred!
See also "/usr/src/GOST/build/CMakeFiles/CMakeOutput.log".

 

Ведь указываю где OpenSSL но все равно тащит из системы. Подскажите насчет этого. Или ссыль на пакет дайте. Все перерыл не нашел.

Система Debian 8.1 Linux blackhole 3.16.0-4-amd64 #1 SMP Debian 3.16.51-3 (2017-12-13) x86_64 GNU/Linux

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


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

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


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

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

Нет, а нужно для сборки engine glibc-2.14?

 

Изменено пользователем arhead

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


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

Я смог запустить OpenSSL, только поменяв для него системные библиотеки (с которыми его собирал).

Но если это делать глобально для системы, то система начинает работать нестабильно.

Поэтому нужен враппер, который меняет LD_LIBRARY_PATH только для конкретного процесса.

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


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

Join the conversation

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

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

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

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

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

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

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