【问题标题】:Can node-gyp extension call extension linked OpenSSL instead of node OpenSSL?node-gyp 扩展调用扩展链接 OpenSSL 而不是节点 OpenSSL?
【发布时间】:2018-05-23 08:16:05
【问题描述】:

在 linux-wmxt 4.16.8-1-default (Tumbleweed) 上运行。

我有一个调用 openssl 1.0 API 的库。我可以动态链接或静态链接。两者都产生相同的结果。

如果我从 C 测试工具运行它,它工作正常。

通过 node-gyp 扩展使用节点的相同调用会产生内存错误,我认为这是由于调用被路由到 API 调用的节点版本,我认为 API 调用使用 openssl 1.1(与 1.0 不兼容的 ABI) .

:
#17 0x12838e1 in ASN1_item_d2i_bio (/home/me/.nvm/versions/node/v10.1.0/bin/node+0x12838e1)
#18 0x7f808108687e in _extractp7certs /home/me/Projects/git/test.sdk.c/c/test/src/testcrypto.c:678
:
SUMMARY: AddressSanitizer: heap-buffer-overflow

MacOS High Sierra 上完全相同的代码库(静态链接)在节点 9.9 上运行良好。

在深入探讨之前:一个简单的问题。有没有办法让 node-gyp 确保我的代码调用我的 OpenSSL 版本而不是 Nodes?还是我必须将我的代码更新为 openssl 1.1?

【问题讨论】:

标签: openssl node-gyp


【解决方案1】:

您可以更改 binding.gyp 并使其在您的节点插件中包含您的 openssl 版本(通过提供路径)中的 lib 和包含文件。

【讨论】:

    【解决方案2】:

    我确实尝试了对 binding.gyp 的各种更改,例如

    {
      "targets": [
        {
          "target_name": "myid",
          "include_dirs": [ "../dep/include" ],
          "sources": [ "./src/myid.c" ],
          "libraries": [
                "/home/me/local/lib64/libcrypto.so",
                "/home/me/local/lib64/libssl.so",
                "/home/me/local/lib64/libcurl.so",
                "/home/me/local/lib64/libxmlsec1.so",
                "../dep/slib/libmylib.so"
            ]
        }
        ]
    }
    

    这些 1.0 库是使用以下工具构建的:

    openssl: ./config --prefix=$HOME/local --openssldir=$HOME/local/openssl

    libcurl: ./configure --prefix=$HOME/local --with-ssl=$HOME/local --disable-ldap

    libxmlsec1: ./configure --prefix=$HOME/local --without-libxslt --with-openssl=$HOME/local

    同样的结果。所以我硬着头皮升级了我的代码以兼容 OpenSSL 1.1+。

    现在节点绑定工作了。

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2017-07-30
      • 2015-12-19
      • 1970-01-01
      相关资源
      最近更新 更多