LINUX.ORG.RU

Debian 11.2 - проблемы с USB-token eToken 5300

 , , ,


0

1

Привет всем,

Система:

uname -ra Linux ХХХХ-GW-B 5.10.0-10-amd64 #1 SMP Debian 5.10.84-1 (2021-12-08) x86_64 GNU/Linux

Проблема:

Для подключения VPN я использую openconnect VPN client с авторизацией через SmartCard с клиентским сертификатом. Если используется SmartCard (manufacturerID: SafeNet, Inc.; model: eToken) подключенный через Alcor Micro AU9540 reader, то всё в порядке, соединение устанавливается. Если же я использую USB SafeNet eToken 5300 (manufacturerID: Gemalto; model: ID Prime MD), то попытки openconnect установить соединение падают с ошибкой:

Error signing test data with private key: PKCS #11 error.
Loading certificate failed. Aborting.
Failed to complete authentication

С дебагером эта ошибка выглядит так (ошибка в модуле PKCS11):

[2022-08-10 11:55:47]  Returned:  0 CKR_OK
[2022-08-10 11:55:47]  gnutls[2]: p11: Initializing module: opensc-pkcs11.module.ORIG
[2022-08-10 11:55:47]  P:37956; T:0x139638815061248 11:55:47.201 [opensc-pkcs11] pkcs11-global.c:402:C_GetInfo: C_GetInfo()
[2022-08-10 11:55:47]  gnutls[2]: p11: module opensc-pkcs11.module.ORIG is already loaded.
[2022-08-10 11:55:47]  gnutls[3]: ASSERT: ../../lib/pkcs11.c[auto_load]:951
[2022-08-10 11:55:47]  gnutls[2]: Cannot load PKCS #11 module: opensc-pkcs11.module.ORIG
[2022-08-10 11:55:47]  gnutls[2]: p11: Initializing module: softhsm2
[2022-08-10 11:55:47]  gnutls[3]: ASSERT: ../../lib/pkcs11.c[compat_load]:896
[2022-08-10 11:55:47]  gnutls[2]: p11: No login requested.
[2022-08-10 11:55:47]  Trying PKCS#11 key URL pkcs11:model=ID%20Prime%20MD;manufacturer=Gemalto;serial=09E850133ABF3E39;token=Pavel;id=%68%35%73%BD%14%9B%F5%37%02%8B%BF%CE%48%FB%71%38%B8%59%91%3E;object=EFF270AEC07D70DA;type=private
[2022-08-10 11:55:47]  PIN required for Pavel 
[2022-08-10 11:55:48]  Enter PIN:
[2022-08-10 11:55:54]  gnutls[2]: p11: Login result = ok (0)
[2022-08-10 11:55:54]  gnutls[3]: ASSERT: ../../lib/pkcs11_privkey.c[gnutls_pkcs11_privkey_import_url]:561
[2022-08-10 11:55:54]  gnutls[2]: p11: No login requested.
[2022-08-10 11:55:54]  Trying PKCS#11 key URL pkcs11:model=ID%20Prime%20MD;manufacturer=Gemalto;serial=09E850133ABF3E39;token=Pavel;id=%68%35%73%BD%14%9B%F5%37%02%8B%BF%CE%48%FB%71%38%B8%59%91%3E;object=EFF270AEC07D70DA;type=private
[2022-08-10 11:55:54]  gnutls[2]: p11: Login result = ok (0)
[2022-08-10 11:55:56]  gnutls[3]: ASSERT: ../../lib/pkcs11_privkey.c[gnutls_pkcs11_privkey_import_url]:561
[2022-08-10 11:55:56]  Trying PKCS#11 key URL pkcs11:model=ID%20Prime%20MD;manufacturer=Gemalto;serial=09E850133ABF3E39;token=Pavel;id=%68%35%73%BD%14%9B%F5%37%02%8B%BF%CE%48%FB%71%38%B8%59%91%3E;type=private
[2022-08-10 11:55:56]  gnutls[2]: p11: Login result = ok (0)
[2022-08-10 11:55:56]  Using PKCS#11 key pkcs11:model=ID%20Prime%20MD;manufacturer=Gemalto;serial=09E850133ABF3E39;token=Pavel;id=%68%35%73%BD%14%9B%F5%37%02%8B%BF%CE%48%FB%71%38%B8%59%91%3E;type=private
[2022-08-10 11:55:56]  gnutls[3]: ASSERT: ../../lib/pkcs11_privkey.c[_gnutls_pkcs11_privkey_sign]:416
[2022-08-10 11:56:27]  gnutls[3]: ASSERT: ../../lib/privkey.c[privkey_sign_and_hash_data]:1300
[2022-08-10 11:56:27]  Error signing test data with private key: PKCS #11 error.  
[2022-08-10 11:56:27]  Loading certificate failed. Aborting. <-------- ошибка тут
[2022-08-10 11:56:27]  Failed to complete authentication

И USB-токен, и смарт-карта имеют одинаковые сертификаты/ключи из одного и того же файла p12. Сначала они были инициализированы, а затем был установлен файл p12.

Используя pkcs11-dump, я обнаружил, что единственная разница между USB-токеном и смарт-картой заключается в значении атрибута CKA_SIGN_RECOVER для закрытого ключа:

CKA_SIGN_RECOVER: TRUE — для смарт-карты

CKA_SIGN_RECOVER: FALSE — для USB-токена

Поскольку атрибут CKA_MODIFIABLE имеет значение TRUE для обоих токенов, я ищу способ изменить значение CKA_SIGN_RECOVER для USB-токена (согласно документам, это возможно). Потом я попытаюсь опять подключиться с openconnect.

Есть идеи как сделать?

Заранее спасибо,


From https://www.cryptsoft.com/pkcs11doc/v201/group__SEC__10__2__COMMON__ATTRIBUTES.html

Only the CKA_LABEL attribute can be modified after the object is created. (The CKA_TOKEN, CKA_PRIVATE, and CKA_MODIFIABLE attributes can be changed in the process of copying an object, however.)

Если CKA_MODIFIABLE не установлен при создании ключа, его можно установить только после export-import. Я бы рекомендовал посмотреть, как его можно установить при создании ключа, хотя, честно говоря, сомневаюсь что дело в этом.

[2022-08-10 11:55:56]  gnutls[3]: ASSERT: ../../lib/pkcs11_privkey.c[_gnutls_pkcs11_privkey_sign]:416
[2022-08-10 11:56:27]  gnutls[3]: ASSERT: ../../lib/privkey.c[privkey_sign_and_hash_data]:1300
[2022-08-10 11:56:27]  Error signing test data with private key: PKCS #11 error.

Я бы ещё открыл исходник lib/pkcs11_privkey.c и посмотрел, что там в _gnutls_pkcs11_privkey_sign происходит и нельзя ли увидеть ошибку поподробнее, чем «PKCS #11 error».

Какая библиотека PKCS11 используется? От OpenSC или вендорская?

Насколько я вижу в https://github.com/OpenSC/OpenSC/issues/1320#issuecomment-380423669

opensc-tool operates on the cards that are supported by OpenSC (i.e. not SafeNet’s eToken), while pkcs11-tool may operate with a vendor supplied PKCS#11 module (i.e. with libeToken.so.9).

что приводит меня к мысли, что как минимум в 2018 году нужно было пользоваться вендорской либой, а не OpenSC.

ivlad ★★★★★
()