Кажется, я вошел в "адский линк", и я не уверен, как решить возникшую у меня проблему.
Я пытаюсь написать движок OpenSSL (https://www.openssl.org/docs/man1.0.2/man3/engine.html), что позволит командам OpenSSL использовать мою библиотеку PKCS # 11 для доступа к моему аппаратному криптокену для выполнения операций cryptographi c. Проблема в том, что моя библиотека PKCS # 11 также использует OpenSSL (например, для генерации ключей, используемых для шифрования связи между хостом и аппаратным токеном). У меня статически связано в libcrypto с моей библиотекой PKCS # 11, и без использования механизма сама библиотека работает правильно.
Когда я запускаю readelf -s
для моей библиотеки PKCS # 11, Я вижу все символы OpenSSL, определенные и в адресном пространстве GLOBAL
.
Однако проблемы начинают появляться, когда я загружаю свою библиотеку PKCS # 11 в OpenSSL, используя движок. Когда это происходит, любой из статически скомпилированных символов (например, RAND_bytes
) игнорируется, и когда моя библиотека выполняет вызов функции OpenSSL (снова, например, RAND_bytes
) вместо вызова функций, которые были Статически связанный с библиотекой, он вызовет функцию RAND_bytes
в библиотеке OpenSSL, в которую он загружается.
Например, если я запускаю openssl rand -e <my engine name> -hex 64
вместо моей библиотеки с использованием RAND_bytes
Функция статически связана, она вызовет RAND_bytes
библиотеки OpenSSL, которую использует приложение openssl
, в результате чего бесконечно l oop.
Я прошу прощения, если я сделал плохая работа, описывающая проблему, это довольно сложно объяснить. Я не уверен, где go отсюда, и, честно говоря, я не уверен, есть ли решение.