You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

OpenVPN клиент зависает / не запрашивает PIN-код от Рутокена

При попытке подключения к OpenVPN серверу через linux клиент с ключами на Рутокен ЭЦП процесс подключения зависает и не пытается спросить PIN-код от Рутокена.

Причина

Проблема в библиотеке libpkcs11-helper которая, будучи вызвана в дочернем процессе (fork), дважды вызывает функцию C_Initialize и плохо обрабатывает ошибку CKR_CRYPTOKI_ALREADY_INITIALIZED

Проявление (имитация поведения):

$ pkcs11-tool --test-fork --module ./librtpkcs11ecp.so

Решение

Пересборка библиотеки libpkcs11-helper с флагами --disable-threading и --disable-slotevent и подмена системной библиотеки libpkcs11-helper

Пошаговое решение на примере Ubuntu Linux (32bit)

Загрузите необходимое окружение для сборки,

$ sudo apt-get install git autoconf libtool libssl-dev

загрузите исходные коды pkcs11-helper,

$ git clone https://github.com/OpenSC/pkcs11-helper.git

 и соберите библиотеку из исходных кодов.

$ cd pkcs11-helper
$ autoreconf -i
$ ./configure --disable-threading --disable-slotevent 
$ make
$ sudo make install

Теперь, когда библиотека собрана, нужно подложить ее вместо системной.

Проверим, что она находится в папке /usr/local/lib

$ find /usr/local/lib -name "libpkcs*"
$ ls -la /usr/local/lib | grep libpkcs11

Если библиотека libpkcs11-helper.so находится - значит все правильно собралось.

Для начала сохраним системную библиотеку под другим именем:

$ sudo mv /usr/lib/i386-linux-gnu/libpkcs11-helper.so.1.0.0 /usr/lib/i386-linux-gnu/libpkcs11-helper.so.1.0.0-original

теперь можно скопировать новую библиотеку вместо старой.

$ sudo cp /usr/local/lib/libpkcs11-helper.so /usr/lib/i386-linux-gnu/libpkcs11-helper.so.1.0.0

Также будет не лишним переделать символическую ссылку

$ sudo rm /usr/lib/i386-linux-gnu/libpkcs11-helper.so.1
$ sudo ln -s /usr/lib/i386-linux-gnu/libpkcs11-helper.so.1.0.0 /usr/lib/i386-linux-gnu/libpkcs11-helper.so.1

Перезапустите openvpn клиент и теперь процесс подключения к серверу запросит PIN-код и, если все остальные настройки в порядке, подключится к серверу

  • No labels