Не работает Рутокен на удаленном сервере.

Добрый день!

Краткое описание проблемы:

1. Имеется локальный удостоверяющий центр на основе openSSL, который физически находится на удаленном сервере.
2. Через Рутокен плагин создаю запрос на сертификат и сохраняю в файл "user.csr".
3. Выполняю команду создания сертификата через командную строку: openssl ca -engine rtengine -batch -in user.csr -out user.crt, все работает. Эта команда записана в файле createUserCrt.cmd
4. Пишу java программу в файле test.java, который запускает файл createUserCrt.cmd, все работает.
5. Пишу ту же логику в своем проекте, который упаковывается в war файл и запускается через tomcat. -> выдается ошибка "unable to load private key":

unable to load CA private key
    3408:error:0609E09C:digital envelope routines:pkey_set_type:unsupported algorithm:crypto\evp\p_lib.c:210:
    3408:error:0606F076:digital envelope routines:EVP_PKCS82PKEY:unsupported private key algorithm:crypto\evp\evp_pkey.c:36:TYPE=GOST R 34.10-2012 with 256 bit modulus
    3408:error:0907B00D:PEM routines:PEM_read_bio_PrivateKey:ASN1 lib:crypto\pem\pem_pkey.c:88:

6. При этом этот проект, когда запущен на рабочей локальной машине, работает отлично и никаких ошибок не возникает.
7. Такое предположение, что при запуске tomcat на удаленной машине, не подключаются алгоритмы из файла rtengine.dll, который подключается в файле openssl.cfg. Так как rtengine.dll работает только при подключенном Рутокене к компьютеру, возможно удаленная машина перестает видеть это подключение при запущенном приложении в tomcat? Есть ли какая-то возможность заставить работать rtengine.dll без подключения Рутокена к компьютеру?

Очень надеюсь на помощь!Подскажите пожалуйста, чем может быть проблема???
Спасибо огромное!

Re: Не работает Рутокен на удаленном сервере.

Добрый день.

Для работы с ГОСТ ключами и сертификатами на файловой системе необходимо использовать gost engine.

Работать с ним можно точно так же как и с нашим rtengine. Пример файла конфигурации представлен тут http://wiki.rosalab.ru/ru/index.php/OpenSSL_и_ГОСТ

Re: Не работает Рутокен на удаленном сервере.

Подскажите пожалуйста, а где взять файл с gost для работы в windows? То, что в сети нахожу, не хочет подключаться!

Спасибо!

Re: Не работает Рутокен на удаленном сервере.

Лучше всего будет собрать самому актуальную версию. Если с этим будут какие-то проблемы, то могу это сделать за вас.

Движок может не грузиться по следующим популярным причинам
1. Разрядность динамической библиотечки отличается от разрядности используемого OpenSSL
2. Возможно путь до библиотеки с движком указан некорректно в конфигурационном файле.

Re: Не работает Рутокен на удаленном сервере.

Помогите пожалуйста собрать под windows 64 разрядной ОС.

Огромное спасибо!

Re: Не работает Рутокен на удаленном сервере.

Добрый день,

Для сборки под windows имеется проблема https://github.com/gost-engine/engine/issues/198. Можно попробовать использовать OpenSSL1.0.2, который можно собрать с поддержкой отечественных ГОСТов. В новых версиях это перешло в отдельный engine.

По вопросам сборки лучше спросить у самих разработчиков gost engine.

Re: Не работает Рутокен на удаленном сервере.

В общем получилось у меня все сделать.
Инструкция, которая работает:
1. Устанавливаем Visual Studio 2017
2. Устанавливаем сmake for Windows
3. Скачиваем gost engine https://github.com/ddulesov/engine.git
4. Заходим в корневой каталог который скачали gost engine (engine master)
5. Выполняем команду в этом каталоге:

cmake -DCMAKE_GENERATOR_PLATFORM=x64 -DOPENSSL_CRYPTO_LIBRARY=libcrypto64MT.lib  -DOPENSSL_ENGINES_DIR="C:\Program Files\OpenSSL-Win64\bin"  -B ./win_amd64 .

6. Происходит компиляция. После компиляции появляется каталог "win_amd64".
7. msbuild команда по умолчанию не работает, для того чтобы заработала, необходимо прописать путь к файлу MSBuild.exe, который находится в каталоге с установленной Visual Studio 2017 в переменную path:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin.
Добавляем свой путь к MSBuild.exe в path.
8. Переходим в каталог "win_amd64".
9. Запускаем командную строку в этом каталоге и вызываем команду:
msbuild gost-engine.sln /p:Configuration=Release /p:Platform=x64
10. Происходит сборка. После сборки в каталоге "win_amd64" появляется файл gost.dll, который находится в "win_amd64/bin/Release".
11. Запоминаем путь к этому файлу.
12. Открываем openssl.cfg и прописываем его туда.
Этот момент посмотреть можно здесь:
https://github.com/gost-engine/engine/issues/198

Спасибо!

Re: Не работает Рутокен на удаленном сервере.

Доброе утро,

Мне сейчас подсказали коллеги, как можно избежать использования gost движка. Для этого в файле конфигурации openssl.cnf при описании секции для rtengine необходимо убрать строчку с RAND_TOKEN. Тогда openssl не будет брать энтропию с токена и шифрование будет производиться без участия токена по сертификату ключевой пары.

Файл конфигурации будет выглядеть примерно так:

[ openssl_def ]
engines = engine_section

[ engine_section ]
rtengine = rtengine_section

[ rtengine_section ]
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/librtengine.so
MODULE_PATH = /usr/lib/librtpkcs11ecp.so
default_algorithms = CIPHERS, DIGEST, PKEY