<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>42274</bug_id>
          
          <creation_ts>2022-03-28 14:07:50 +0300</creation_ts>
          <short_desc>openssl engine pkcs11 не работает в версии 1.1.1n</short_desc>
          <delta_ts>2022-03-31 20:03:28 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>openssl1.1</component>
          <version>unstable</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Белаш Константин">bk</reporter>
          <assigned_to name="Gleb F-Malinovskiy">glebfm</assigned_to>
          <cc>glebfm</cc>
    
    <cc>klark</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>208971</commentid>
    <comment_count>0</comment_count>
    <who name="Белаш Константин">bk</who>
    <bug_when>2022-03-28 14:07:50 +0300</bug_when>
    <thetext>При инициализации 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]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208973</commentid>
    <comment_count>1</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2022-03-28 14:36:36 +0300</bug_when>
    <thetext>Скорее блокер, т.к. из-за этой регрессии отвалились все токены, не получится проверить доменную и локальную 2ФА при выпуске K-10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208976</commentid>
    <comment_count>2</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2022-03-28 18:31:34 +0300</bug_when>
    <thetext>Проверьте, пожалуйста задание:
#297394 TESTED #1 [test-only] sisyphus openssl.git=1.1.1n-alt2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208981</commentid>
    <comment_count>3</comment_count>
    <who name="Белаш Константин">bk</who>
    <bug_when>2022-03-28 21:12:26 +0300</bug_when>
    <thetext>$ 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 не инициализируется, а через конфиг нормально. Но правда тогда в командной строки была ошибка. В данном случае &quot;говорит&quot; что загрузил, но по итогу - нет. Возможно особенность Сизифа.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208982</commentid>
    <comment_count>4</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2022-03-29 02:34:43 +0300</bug_when>
    <thetext>А если в конец первой команды openssl добавить опцию -t?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208983</commentid>
    <comment_count>5</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2022-03-29 03:09:33 +0300</bug_when>
    <thetext>Или вторым аргументом:

$ 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</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208986</commentid>
    <comment_count>6</comment_count>
    <who name="Белаш Константин">bk</who>
    <bug_when>2022-03-29 10:50:51 +0300</bug_when>
    <thetext>$  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</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209002</commentid>
    <comment_count>7</comment_count>
    <who name="Белаш Константин">bk</who>
    <bug_when>2022-03-29 15:58:19 +0300</bug_when>
    <thetext>Коллеги, перепроверил свое первое сообщение, где я писал &quot;Как должно быть и как работает на предыдущей версии&quot;. Так вот вывод:

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

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

При инициализации через командную строку на ВМ, где &quot;Как должно быть&quot;, без прописывания в конфиге 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 ]

Похоже, что инициализация через командную строку поломана когда-то раньше.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209006</commentid>
    <comment_count>8</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2022-03-29 18:47:58 +0300</bug_when>
    <thetext>Мне кажется, у вас какие-то ложные ожидания.

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

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

&gt; # openssl engine -t
&gt; (dynamic) Dynamic engine loading support
&gt;      [ unavailable ]

Предыдущая команда на вывод этой команды не влияет совсем.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209007</commentid>
    <comment_count>9</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2022-03-29 18:50:17 +0300</bug_when>
    <thetext>Но давайте, пожалуйста вернёмся к основной теме этой ошибки.
Я хотел бы получить ответ на вопрос -- исправляет ли openssl 1.1.1n-alt2 изначальную регрессию.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209012</commentid>
    <comment_count>10</comment_count>
    <who name="Leonid Krivoshein">klark</who>
    <bug_when>2022-03-29 20:05:59 +0300</bug_when>
    <thetext>(Ответ для Gleb F-Malinovskiy на комментарий #9)
&gt; Я хотел бы получить ответ на вопрос -- исправляет ли openssl 1.1.1n-alt2
&gt; изначальную регрессию.
Я считаю, что исправляет, т.к. и через командную строку engine подгружается, и через конфиг. Нужно отправлять тестировщикам. Давай, дождёмся ответа Константина.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209013</commentid>
    <comment_count>11</comment_count>
    <who name="Белаш Константин">bk</who>
    <bug_when>2022-03-29 20:41:15 +0300</bug_when>
    <thetext>(Ответ для Gleb F-Malinovskiy на комментарий #8)
&gt; Мне кажется, у вас какие-то ложные ожидания.
Возможно я ошибаюсь.

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

После использования 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 в конфигурационном файле также происходит без ошибок.
Видимо, проблема решена.
Спасибо.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209056</commentid>
    <comment_count>12</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2022-03-31 20:03:28 +0300</bug_when>
    <thetext>openssl1.1-1.1.1n-alt2 -&gt; sisyphus:

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

    </bug>

</bugzilla>