Еще есть проблема в 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);
}