1. Экспорт ЭЦП из eToken. 1.1. На Windows XP установлены: a) PKIClient_x32_5.1_SP1.msi - драйвер eToken. Сам eToken вставляется только после установки драйвера. b) cspsetup.exe - криптопровайдер (CSP) КриптоПро 3.6 в режиме демоверсии, без серийного ключа. Криптопровайдер необходим для извлечения ЭЦП (сертификат и приватный ключ) из eToken, потому что PKI client не предоставляет интерфейса для извлечения приватного ключа из eToken. c) P12FromGostCSP.exe - бесплатная утилита для экспорта ЭЦП из контейнера КриптоПро в файл формата PFX (PKCS#12), не требует инсталляции. Необходима в связи с тем, что штатный интерфейс КриптоПро/Windows шифрует PFX-файл методом, не распознаваемым openssl 1.0.1c, собранным с поддержкой ГОСТ. 1.2. Вставить eToken, дождаться его распознавания системой, если этого ещё не сделано ранее. Запустить КриптоПро, на вкладке "Сервис" нажать кнопку "Просмотреть сертификаты в контейнере...". В новом окне "Сертификаты в контейнере закрытого ключа" нажать кнопку "Обзор..." и в новом окне "КриптоПро CSP" должен быть непуст "Список ключевых контейнеров пользователя". Дождаться, когда кнопка Ok разблокируется, нажать её при выделенном считывателе с нужным именем - происходит возврат в окно "Сертификаты в контейнере закрытого ключа". Нажать кнопку "Далее", затем кнопку "Установить". 1.3 Для экспортирования ЭЦП в PFX-файл при вставленном eToken запустить P12FromGostCSP.exe, в окне "Выбор сертификата" выбрать ЭЦП и нажать OK. Ввести Pin-код для eToken. В следующем окне "Задайте пароль" желательно вводить пустой пароль, чтобы приватный ключ в файле был не зашифрован (распространение такого файла в "чужие руки" недопустимо, так как приводит к компрометации ЭЦП). Сохранить результат в файл с именем вида r.pfx 2. Преобразование бинарного файла pfx в формат, пригодный для подписования запросов. 2.1. Необходимо использовать openssl, собранный с поддержкой криптоалгоритмов ГОСТ. К штатному файлу конфигурации openssl.cnf.sample приложить патч, включающий использование ГОСТ: --- openssl.cnf.sample 2012-11-14 15:50:37.000000000 +0700 +++ openssl.cnf 2012-11-12 17:15:49.000000000 +0700 @@ -1,3 +1,5 @@ +openssl_conf = openssl_def + # # OpenSSL example configuration file. # This is mostly being used for generation of certificate requests. @@ -348,3 +350,15 @@ # (optional, default: no) ess_cert_id_chain = no # Must the ESS cert id chain be included? # (optional, default: no) + +[openssl_def] +engines = engine_section + +[engine_section] +gost = gost_section + +[gost_section] +engine_id = gost +dynamic_path = /usr/local/lib/engines/libgost.so +default_algorithms = ALL +CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet 2.2. Извлечение сертификата из файла pfx в файл cer: openssl pkcs12 -in r.pfx -out r.cer -nokeys В ответ на запрос ввести пароль, заданный на этапе 1.3. 2.3. Извлечение приватного ключа из файла pfx в файл pem: openssl pkcs12 -in r.pfx -out r.pem -nodes В ответ на запрос ввести пароль, заданный на этапе 1.3. 3. Подписывание сформированного запроса. openssl smime -sign -in request.xml -out request.xml.sign -binary -signer r.pem -outform DER