Яндекс.Метрика

    Песочница

    OpenSSL с использованием аппаратной реализации алгоритмов ГОСТ

    Как известно, OpenSSL версии 1.0.0 и старше поддерживает российские криптоалгоритмы ГОСТ, причем поддержка этих алгоритмов полнофункциональна: реализованы подпись и шифрование в форматах PKCS#7, CMS, S/MIME в соответствии с российскими стандартами и RFC; протокол TLS с поддержкой российских шифрсьютов и т.п.

    Таким образом, OpenSSL полностью совместим с проприетарными средствами криптозащиты российских производителей.

    Для поддержки ГОСТов в него добавлен специальный «плагин» — engine gost. Вместе с тем существуют криптографические USB-токены с аппартной реализацией российских криптоалгоритмов на «борту». Примером такого токена является Рутокен ЭЦП, который, кстати сказать, сертифицирован. Рутокен ЭЦП можно подключить к OpenSSL таким образом, что криптографические операции будут делаться на «борту»
    токена.

    Для Рутокен ЭЦП имеется специальный кроссплатформенный плагин к OpenSSL — engine pkcs11_gost, который позволяет использовать аппаратную релизацию ГОСТов через стандартный интерфейс OpenSSL.

    Здесь опишу, как это делается на win32.

    1. OpenSSL можно взять отсюда www.slproweb.com/products/Win32OpenSSL.html. При установке в диалоге “Select Additional Tasks” следует выбрать “The OpenSSL” binaries (/bin) directory”.

    2. Плагин и требующиеся ему библиотеки можно скачать по ссылке www.rutoken.ru/download/software/forum/pkcs11-gost-win32-4.2.0.zip.

    3. Содержимое архива следует скопировать в папку установки OpenSSL/bin. При этом конфиг openssl. cfg надо заменить, так как в архиве содержится конфиг заточенный на использование engine pkcs11_gost.

    4. Затем запускаем cmd.exe (ну или кому что нравится) и указываем в переменных окружения наш конфиг SET OPENSSL_CONF=полный путь к файлу конфигурации openssl.cfg.

    5. Теперь нужно установить драйвера Рутокен, подключить к компьютеру Рутокен ЭЦП и отформатировать его через Панель управления->Панель управления Рутокен.

    Используя утилиту openssl.exe пройдем путь, который позволит нам подписать файл. При этом криптографические операции (а здесь используются генерация ключа и электронная подпись) будут производиться «на борту» Рутокен ЭЦП

    1. Сгенерим ключ подписи ГОСТ Р 34.10-2001:

    openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:50 -pkeyopt paramset:A -pkeyopt pin:12345678

    2. Cоздадим заявку на сертификат в формате PKCS#10 для созданного ключа:

    openssl req -engine pkcs11_gost -new -key 50 -keyform engine -out req.csr

    3. Создадим самоподписанный корневой сертификат, для того чтобы выдать пользовательский сертификат на заявку. Для начала сгенерируем внутри токена ключ УЦ:

    openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:100 -pkeyopt paramset:A -pkeyopt pin:12345678

    Затем сами себе выдадим корневой сертификат для этого ключа:

    openssl req -engine pkcs11_gost -x509 -new -key 100 -keyform engine -out ca.crt

    4. Выпустим сертификат по заявке, полученной на шаге 2. Для этого в папке установки OpenSSL/bin создадим папку demoCA, в которой создадим папку newcerts. В папке demoCA создадим пустой файл index.txt и файл serial, в котором напишем 01. Это позволит нам вести учет выданных сертификатов. Команда выдачи сертификата:

    openssl ca -engine pkcs11_gost -keyfile 100 -keyform engine -cert ca.crt -in req.csr -out tester.crt

    5. Подпишем произвольный файл “присоединенной” подписью в формате S/MIME:

    openssl smime -engine pkcs11_gost -sign -in [имя файла] -out [подписанный файл] -nodetach -binary -signer tester.crt -inkey 50 -keyform engine

    в формате PKCS#7:

    openssl smime -engine pkcs11_gost -sign -in [имя файла] -out [подписанный файл] -nodetach -binary -signer tester.crt -inkey 50 -keyform engine -outform PEM

    в формате CMS:

    openssl cms -engine pkcs11_gost -sign -in [имя файла] -out [подписанный файл] -nodetach -binary -signer tester.crt -inkey 50 -keyform engine -outform PEM

    Более детальное описание использования OpenSSL с Рутокен ЭЦП можно найти на странице forum.rutoken.ru/topic/1639/.