Bug 42274 - openssl engine pkcs11 не работает в версии 1.1.1n
Summary: openssl engine pkcs11 не работает в версии 1.1.1n
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: openssl1.1 (show other bugs)
Version: unstable
Hardware: x86 Linux
: P5 critical
Assignee: Gleb F-Malinovskiy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-03-28 14:07 MSK by Белаш Константин
Modified: 2022-03-31 20:03 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Белаш Константин 2022-03-28 14:07:50 MSK
При инициализации openssl engine c библиотекой pkcs11.so в версии openssl 1.1.1n происходит ошибка. Соответственно openssl не может работать с аппаратными токенами.

Ошибка воспроизводится на след. версии openssl:

$ rpm -q openssl
openssl-1.1.1n-alt1.x86_64

$ openssl engine dynamic -pre SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
Loaded: (pkcs11) pkcs11 engine
139850181737984:error:2506406A:DSO support routines:dlfcn_bind_func:could not bind to the requested symbol name:crypto/dso/dso_dlfcn.c:188:symname(EVP_PKEY_get_base_id): /usr/lib64/openssl/engines-1.1/pkcs11.so: undefined symbol: EVP_PKEY_get_base_id
139850181737984:error:2506C06A:DSO support routines:DSO_bind_func:could not bind to the requested symbol name:crypto/dso/dso_lib.c:186:


Как должно быть и как работает на предыдущей версии:

$ rpm -q openssl
openssl-1.1.1l-alt1.x86_64

$ openssl engine dynamic -pre SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
Loaded: (pkcs11) pkcs11 engine

Смотрим доступные engine:
$ openssl engine -t
(dynamic) Dynamic engine loading support
     [ unavailable ]
(pkcs11) pkcs11 engine
     [ available ]

Смотрим доступные протоколы для engine pkcs11:
$ openssl engine pkcs11 -c
(pkcs11) pkcs11 engine
 [RSA, rsaEncryption, id-ecPublicKey]
Comment 1 Leonid Krivoshein 2022-03-28 14:36:36 MSK
Скорее блокер, т.к. из-за этой регрессии отвалились все токены, не получится проверить доменную и локальную 2ФА при выпуске K-10.
Comment 2 Gleb F-Malinovskiy 2022-03-28 18:31:34 MSK
Проверьте, пожалуйста задание:
#297394 TESTED #1 [test-only] sisyphus openssl.git=1.1.1n-alt2
Comment 3 Белаш Константин 2022-03-28 21:12:26 MSK
$ apt-repo
rpm [alt] http://ftp.altlinux.org/pub/distributions ALTLinux/Sisyphus/x86_64 classic
rpm [alt] http://ftp.altlinux.org/pub/distributions ALTLinux/Sisyphus/noarch classic
rpm [alt] http://ftp.altlinux.org/pub/distributions ALTLinux/Sisyphus/x86_64-i586 classic

$ rpm -q openssl
openssl-1.1.1n-alt2.x86_64

Если engine инициализировать из командной строки:

 $ openssl engine dynamic -pre SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
Loaded: (pkcs11) pkcs11 engine

Вроде бы загружает, но 

$ openssl engine -t
(dynamic) Dynamic engine loading support
     [ unavailable ]

говорит что нет доступного engine


Если engine инициализировать явно, через конфиг openssl (как здесь указано https://github.com/OpenSC/libp11):

в начало /etc/openssl/openssl.cnf добавляем

openssl_conf = openssl_def
 
в конец /etc/openssl/openssl.cnf добавляем

[ openssl_def ]
engines = engine_section
[ engine_section ]
pkcs11 = pkcs11_section
[ pkcs11_section ]
dynamic_path = /usr/lib64/openssl/engines-1.1/pkcs11.so
MODULE_PATH = /usr/lib64/pkcs11/librtpkcs11ecp.so

то:

$ openssl engine -t
(dynamic) Dynamic engine loading support
     [ unavailable ]
(pkcs11) pkcs11 engine
     [ available ]

$ openssl engine pkcs11 -c
(pkcs11) pkcs11 engine
 [RSA, rsaEncryption, id-ecPublicKey]

Нормально.


Бывало и раньше сталкивался с тем, что из командной строки engine не инициализируется, а через конфиг нормально. Но правда тогда в командной строки была ошибка. В данном случае "говорит" что загрузил, но по итогу - нет. Возможно особенность Сизифа.
Comment 4 Leonid Krivoshein 2022-03-29 02:34:43 MSK
А если в конец первой команды openssl добавить опцию -t?
Comment 5 Leonid Krivoshein 2022-03-29 03:09:33 MSK
Или вторым аргументом:

$ openssl engine -t dynamic \
  -pre SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so \
  -pre ID:pkcs11 -pre LIST_ADD:1 \
  -pre LOAD -pre MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
Comment 6 Белаш Константин 2022-03-29 10:50:51 MSK
$  openssl engine -t pkcs11 -pre SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so \
-pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD \
-pre MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so
engine: Cannot mix flags and engine names.
engine: Use -help for summary.

-t - тестирует доступные engine
Comment 7 Белаш Константин 2022-03-29 15:58:19 MSK
Коллеги, перепроверил свое первое сообщение, где я писал "Как должно быть и как работает на предыдущей версии". Так вот вывод:

$ openssl engine -t
(dynamic) Dynamic engine loading support
     [ unavailable ]
(pkcs11) pkcs11 engine
     [ available ]

был при прописанном engine в openssl.

При инициализации через командную строку на ВМ, где "Как должно быть", без прописывания в конфиге openssl - вывод такой же как и в #297394, т.е. [ unavailable ]

На c9f1, где openssl-1.1.1l-alt1.x86_64, также не инициализируется через ком.строку:

# rpm -q openssl
openssl-1.1.1l-alt1.x86_64

# openssl engine dynamic -pre SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
Loaded: (pkcs11) pkcs11 engine

alt8sp-vm344 ~ # openssl engine -t
(dynamic) Dynamic engine loading support
     [ unavailable ]

Похоже, что инициализация через командную строку поломана когда-то раньше.
Comment 8 Gleb F-Malinovskiy 2022-03-29 18:47:58 MSK
Мне кажется, у вас какие-то ложные ожидания.

(In reply to Белаш Константин from comment #7)
> # openssl engine dynamic -pre
> SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre
> LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
> (dynamic) Dynamic engine loading support
> [Success]: SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so
> [Success]: ID:pkcs11
> [Success]: LIST_ADD:1
> [Success]: LOAD
> [Success]: MODULE_PATH:/usr/lib64/librtpkcs11ecp.so
> Loaded: (pkcs11) pkcs11 engine

Эта команда загружает указанный в командной строке модуль, но на конфигурацию это ни коим образом не влияет.  В данном случае это просто позволяет проверить, что конкретный модуль можно загрузить.

> # openssl engine -t
> (dynamic) Dynamic engine loading support
>      [ unavailable ]

Предыдущая команда на вывод этой команды не влияет совсем.
Comment 9 Gleb F-Malinovskiy 2022-03-29 18:50:17 MSK
Но давайте, пожалуйста вернёмся к основной теме этой ошибки.
Я хотел бы получить ответ на вопрос -- исправляет ли openssl 1.1.1n-alt2 изначальную регрессию.
Comment 10 Leonid Krivoshein 2022-03-29 20:05:59 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #9)
> Я хотел бы получить ответ на вопрос -- исправляет ли openssl 1.1.1n-alt2
> изначальную регрессию.
Я считаю, что исправляет, т.к. и через командную строку engine подгружается, и через конфиг. Нужно отправлять тестировщикам. Давай, дождёмся ответа Константина.
Comment 11 Белаш Константин 2022-03-29 20:41:15 MSK
(Ответ для Gleb F-Malinovskiy на комментарий #8)
> Мне кажется, у вас какие-то ложные ожидания.
Возможно я ошибаюсь.

> Эта команда загружает указанный в командной строке модуль, но на
> конфигурацию это ни коим образом не влияет.  В данном случае это просто
> позволяет проверить, что конкретный модуль можно загрузить.

После использования openssl из задания #297394 след. команда:
$ openssl engine dynamic -pre SO_PATH:/usr/lib64/openssl/engines-1.1/pkcs11.so \
-pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD \
-pre MODULE_PATH:/usr/lib64/pkcs11/librtpkcs11ecp.so

выполняется без ошибок.

Инициализация openssl engine в конфигурационном файле также происходит без ошибок.
Видимо, проблема решена.
Спасибо.
Comment 12 Repository Robot 2022-03-31 20:03:28 MSK
openssl1.1-1.1.1n-alt2 -> sisyphus:

 Mon Mar 28 2022 Gleb F-Malinovskiy <glebfm@altlinux> 1.1.1n-alt2
 - Backported upstream fix for engine version check (ALT#42274).