Сборка примеров на *nix
Опубликовано Андрей Русев on 2021-01-11 10:13

Сборка на традиционных *nix

В состав дистрибутива для большинства *nix-платформ входит пакет разработчика:

ПлатформаПакет разработчика
AIX cprocsp-devel
Аврора включён в cprocsp-binaries
FreeBSD cpro-devel
Linux lsb-cprocsp-devel
macOS CPROcspd
Sailfish lsb-cprocsp-devel
Solaris CPROcspd

Пакет надо установить вместе с самим КриптоПро CSP.
Рецепт для сборки примеров в /opt/cprocsp/src/readme.unix
Для 64-битной системы он выглядит так:

cd /opt/cprocsp/src/samples/CSP
eval `/opt/cprocsp/src/samples/setenv.sh --64`; make -f Makefile.unix clean
eval `/opt/cprocsp/src/samples/setenv.sh --64`; make -f Makefile.unix

На Linux это даст примерно такие команды компиляции и линковки:

g++ -std=c++98 -D_GLIBCXX_USE_CXX11_ABI=0 -DUNIX -DHAVE_LIMITS_H -D_COMPACT -DHAVE_STDINT_H -I/opt/cprocsp/include -I/opt/cprocsp/include/cpcsp -I/opt/cprocsp/include/asn1c/rtsrc -I/opt/cprocsp/include/asn1data -DSIZEOF_VOID_P=8 -g -c -o CryptMsgSign.o CryptMsgSign.cpp
g++ -std=c++98 -D_GLIBCXX_USE_CXX11_ABI=0 CryptMsgSign.o -L/opt/cprocsp/lib/amd64 -lssp -lcapi10 -lcapi20 -lrdrsup -lpthread -g -o CryptMsgSign

А на macOS - примерно такие:

clang++ -std=c++98 -DUNIX -DHAVE_LIMITS_H -D_COMPACT -I/opt/cprocsp/include -I/opt/cprocsp/include/cpcsp -I/opt/cprocsp/include/asn1c/rtsrc -I/opt/cprocsp/include/asn1data -DSIZEOF_VOID_P=8 -g -c -o CryptMsgSign.o CryptMsgSign.cpp
clang++ -std=c++98 CryptMsgSign.o -L/opt/cprocsp/lib -lssp -lcapi10 -lcapi20 -lrdrsup -lpthread -framework CoreFoundation -g -o CryptMsgSign

Особенности на Авроре 3

Из-за требований валидатора пакетов на Авроре (не на Sailfish):

  • можно использовать только КриптоПро CSP 5.0 R2 (сборку 5.0.12000 Kraken)
  • дистрибутив для Авроры монолитный (из одного пакета)
  • не содержит пакета для разработчика
  • не содержит приложений (certmgr/cryptcp/csptest...)
  • библиотеки лежат не в традиционных местах, а в /usr/share/cprocsp/lib/
  • подключать их можно только с помощью RPATH или явной подгрузкой (dlopen)

Чтобы отчасти компенсировать эти проблемы, сделан пакет cprocsp-binaries, который невозможно установить на сертифицированную ОС (из-за валидатора). В этот пакет входят:

  • пакет для разработчика
  • приложения (certmgr/cryptcp/csptest...)

Особенности на Авроре 4 / 5

Из-за смены требований валидатора и появления изоляции пакетов на Авроре (не на Sailfish):

  • можно использовать только КриптоПро CSP 5.0 R3 (сборку 5.0.12417 Osiris или более свежую)
  • дистрибутив для Авроры монолитный (из одного пакета)
  • не содержит пакета для разработчика
  • не содержит приложений (certmgr/cryptcp/csptest...)
  • библиотеки лежат не в традиционных местах, а в /usr/lib/3rdparty/cprocsp/lib/
  • подключать их можно только с помощью dlopen (библиотеки libcapi10, libcapi20)
  • механизм отображения диалогов провайдера (БиоДСЧ, ввод пароля) из сторонних приложений находится в проработке, до её завершения необходимо перенести эту задачу на прикладное ПО: задавать пароли с помощью CryptSetProvParam(PP_KEYEXCHANGE_PIN), вместо генерации ключей использовать импорт готовых контейнеров из pfx или отделяемые носители
  • В desktop-файл вашего приложения надо добавить привилегии для доступа к СКЗИ КриптоПро CSP:
    Permissions=UserDirs;Internet;ru.cryptopro.gui@ru.cryptopro.csp
    Иначе при обращении к функциям провайдера будет возвращаться ошибка 0x8009001d = NTE_PROVIDER_DLL_FAIL.

Чтобы отчасти компенсировать эти проблемы, сделан пакет cprocsp-binaries, который невозможно установить на сертифицированную ОС (из-за валидатора). В этот пакет входят:

  • пакет для разработчика
  • приложения (certmgr/cryptcp/csptest...)

Руководства разработчика

Основной интерфейс для встраивания КриптоПро CSP - это CryptoAPI. Он разработан компанией Microsoft и портирован нами на все платформы, поэтому главными источниками при разработке будут:

  • Описание реализации (pdf-документ из комплекта документации на СКЗИ)
  • Правила пользования (pdf-документ из комплекта документации на СКЗИ), особенно "Приложение 2" - "Перечень вызовов, использование которых при разработке систем на основе СКЗИ возможно без дополнительных тематических исследований"
  • Раздел про криптографию на MSDN - здесь наиболее объёмная документация на API
  • Руководство программиста - дополняет MSDN в части поддержки отечественных алгоритмов, а также расширения API в нашем СКЗИ
(17 плюсик(ов))
Класс!
Не очень :(