MacOS Rutoken Tunnelblick проблемы с сертификатом

Добрый день, хочу настроить Rutoken для работы в Tunnelblick по инструкции
https://dev.rutoken.ru/pages/viewpage.a … Id=4227164

Для того чтобы узнать ID использую команду:
/Applications/Tunnelblick.app/Contents/Resources/openvpn/openvpn-2.5.4-openssl-1.1.1l/openvpn --show-pkcs11-ids '/Library/Aktiv Co/Rutoken ECP/lib/librtpkcs11ecp.dylib'

и получать следующий ответ:
PKCS#11: Cannot add provider '/Library/Aktiv Co/Rutoken ECP/lib/librtpkcs11ecp.dylib' 6-'CKR_FUNCTION_FAILED'
Exiting due to fatal error

Подскажите как решить данную проблему и возможна ли вообще работа Rutoken в Tunnelblick на OS Monterey на процессоре М1?
Спасибо!

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

Dubishev, добрый день!

Вероятно, вы столкнулись с https://github.com/Tunnelblick/Tunnelblick/issues/706

Решение: https://github.com/Tunnelblick/Tunnelbl … -580414421

Попробуйте использовать сборку OpenVPN, установленную через brew.

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

Павел, добрый день!

Спасибо. Инструкция по ссылкам помогла в решении вопроса, ID я получил. Но столкнулся со следующей проблемой Tunnelblick не видит Rutoken просит его вставить. Возможно это из за невозможности ввести PIN.
Ниже привожу пример лога. Вы сталкивались с подобной проблемой? Спасибо.

2022-11-30 14:49:22.210266 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:60134
2022-11-30 14:49:22.239003 MANAGEMENT: CMD 'pid'
2022-11-30 14:49:22.239065 MANAGEMENT: CMD 'auth-retry interact'
2022-11-30 14:49:22.239183 MANAGEMENT: CMD 'state on'
2022-11-30 14:49:22.239221 MANAGEMENT: CMD 'state'
2022-11-30 14:49:22.239263 MANAGEMENT: CMD 'bytecount 1'
2022-11-30 14:49:22.239678 *Tunnelblick: Established communication with OpenVPN
2022-11-30 14:49:22.246372 *Tunnelblick: >INFO:OpenVPN Management Interface Version 3 -- type 'help' for more info
2022-11-30 14:49:22.247617 MANAGEMENT: CMD 'hold release'
2022-11-30 14:49:22.247824 PKCS#11: Adding PKCS#11 provider '/Library/Aktiv Co/Rutoken ECP/lib/librtpkcs11ecp.dylib'
2022-11-30 14:49:22.254066 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
2022-11-30 14:49:24.648113 MANAGEMENT: CMD 'needok token-insertion-request cancel'
2022-11-30 14:49:24.648304 PKCS#11: Cannot get certificate object
2022-11-30 14:49:24.648330 PKCS#11: Cannot get certificate object
2022-11-30 14:49:24.648346 PKCS#11: Unable get evp object

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

Dubishev, добрый день!

Какой OpenSSL вы используете: 1.1.x или 3.х?
Убедитесь, что pkcs11-helper установлен последний: https://formulae.brew.sh/formula/pkcs11-helper

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

Использую OpenSSL 1.1.1s
Убедился pkcs11-helper 1.29.0 is already installed

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

Dubishev

К сожалению, проблема упирается в баг TunnelBlick и его взаимодействие с  PCSC-слоем у OpenVPN, после вызова функции fork(). Подробности в баге: https://community.openvpn.net/openvpn/ticket/961

Наше предложение также осталось без рассмотрения: https://github.com/Tunnelblick/Tunnelblick/issues/640

Остается рабочий вариант использовать напрямую openvpn из консоли напрямую.
Главный момент, чтобы OpenVPN  был собран с enable_pkcs11=yes.

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

Еще есть проблема в openvpn. Он кроется в синхронизации потоков.

Сделали фиксы:
https://github.com/OpenSC/pkcs11-helper/pull/37
https://github.com/OpenVPN/openvpn/pull/158


Можете попробовать собрать с  патчем pkcs11-helper, а потом вместе с ним уже пересобрать OpenVPN. При таком патче никаких изменений в код OpenVPN вносить будет не нужно.

Патч:

diff --git a/lib/pkcs11h-core.c b/lib/pkcs11h-core.c
index 640fc03..a83003e 100644
--- a/lib/pkcs11h-core.c
+++ b/lib/pkcs11h-core.c
@@ -759,9 +759,8 @@ pkcs11h_addProvider (
     }
 
     memset(&initargs, 0, sizeof(initargs));
-    if ((initargs.pReserved = getenv("PKCS11H_INIT_ARGS_RESERVED")) != NULL) {
-        pinitargs = &initargs;
-    }
+    initargs.flags = CKF_OS_LOCKING_OK;
+    pinitargs = &initargs;
 
     if ((rv = provider->f->C_Initialize (pinitargs)) != CKR_OK) {
         if (rv == CKR_CRYPTOKI_ALREADY_INITIALIZED) {
@@ -1032,6 +1031,7 @@ pkcs11h_plugAndPlay (void) {
     pid_t mypid = getpid ();
 #endif
 #endif
+    CK_C_INITIALIZE_ARGS initargs;
 
     _PKCS11H_DEBUG (
         PKCS11H_LOG_DEBUG2,
@@ -1071,7 +1071,9 @@ pkcs11h_plugAndPlay (void) {
             current = current->next
         ) {
             if (current->enabled) {
-                current->f->C_Initialize (NULL);
+                memset(&initargs, 0, sizeof(initargs));
+                initargs.flags = CKF_OS_LOCKING_OK;
+                current->f->C_Initialize (&initargs);
             }
         }
 
@@ -1303,6 +1305,7 @@ __pkcs11h_forkFixup () {
 #if defined(ENABLE_PKCS11H_DEBUG)
     pid_t mypid = getpid ();
 #endif
+    CK_C_INITIALIZE_ARGS initargs;
 
     _PKCS11H_DEBUG (
         PKCS11H_LOG_DEBUG2,
@@ -1319,6 +1322,8 @@ __pkcs11h_forkFixup () {
             current = current->next
         ) {
             if (current->enabled) {
+                memset(&initargs, 0, sizeof(initargs));
+                initargs.flags = CKF_OS_LOCKING_OK;
                 current->f->C_Initialize (NULL);
             }

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

К сожалению моих пользовательских знаний для выполнения подобных действий пока не достаточно. Есть какие то готовые варианты решения моей проблемы?

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

На крайний случай можно реализовать поддержку Rutoken в OpenVPN на Windows 11 ARM? Если я не смогу решить эту проблему в Mac OS.

Re: MacOS Rutoken Tunnelblick проблемы с сертификатом

Dubishev, напишите нам на hotline@rutoken.ru - сможем отправить вам сборку OpenVPN с патчем для mac, что работает у нас.