Information Security
December 2011 16

Подключаем Рутокен ЭЦП к OpenSSL

From Sandbox
UPDATE. Готовое решение для электронной подписи в браузере — Рутокен Плагин

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

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

Для поддержки ГОСТов в него добавлен специальный «плагин» — engine gost. Вместе с тем существуют криптографические USB-токены с аппартной реализацией российских криптоалгоритмов на «борту». Примером такого токена является Рутокен ЭЦП, который, кстати сказать, сертифицирован как СКЗИ по классу КС2. Рутокен ЭЦП можно подключить к 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.
+19
15.5k 40
Comments 8