问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何正确使用Nodejs 的 c++ module 链接到 OpenSSL

发布网友 发布时间:2022-04-23 21:36

我来回答

1个回答

热心网友 时间:2022-04-22 21:02

事情的起因是这样的, 因为某些原因, 最近在写 Nodejs 的 c++ mole, 然后在js这边调用。 网络通信自然离不开ssl, 于是需要链接到Openssl的库。

我们本来的期望是,需要用户安装有Openssl的运行库, 然后我们的c++ mole 动态链接到Openssl的so库上来运行。

起初一切看起来还不错,直到我们发现这个openssl的函数不能工作:

PKCS7_sign()
PKCS7_sign ( )
我们发现:

如果我们的 c++ 模块与Openssl库动态链接的话, 编译都没问题. 但是运行会出现: PKCS7_sign 符号无法找到的错误.
如果我们的 c++ 模块与Openssl库静态链接的话, 编译也没问题, 但是运行时,调用这个函数的地方没有效果, 这个函数返回值是 0. 按照文档表示出现错误, 但是用 Openssl的函数 ERR_get_error 获取错误码也是0. 表示没有错误码.
在linux上是这样, 那在Mac上呢? 用Mac试了一下, 发现Mac没有问题. 于是,想到这可能是Nodejs的一个bug. 然后就去 Nodejs 给它报了一个bug: [https://github.com/joyent/node/issues/8026][1]

同时, google上搜索了 nodejs linking to openssl 类似的关键字.

找到这样几篇文章:

https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL

https://github.com/joyent/node/issues/3915

http://serverfault.com/questions/338092/how-can-i-build-node-js-using-static-libssl-and-crypto-libraries

https://github.com/robhawkes/node-extension/issues/1

通过搜索, 我们发现, 原来Nodejs自己也使用了Openssl 库, 推测nodejs自己的crypto模块也是使用Openssl lib实现的. 这点从Nodejs的源码中就能发现, 它包含了最新的Openssl的全部源码.

其中写上面第一篇文章: https://github.com/TooTallNate/node-gyp/wiki/Linking-to-OpenSSL 的那个帅哥是Nodejs的开发人员.

基本结论:

Nodejs 自己使用了Openssl
在Nodejs 0.6之前, Nodejs是动态链接到 Openssl 库的. 而之后的版本都是静态链接的.
这时发现 Node 那边已经回复我的bug了: https://github.com/joyent/node/issues/8026

Node 解释的原因:

Node 自己编译之后, 把自己没用到的符号清除, 所以我们在运行时就找不到符号了. 于是他们把这bug 修掉了. 保留了全部符号. 这导致 Node 的体积大了 400k.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
运航不锈钢304方管有哪几种型号 镀锌方管有哪些型号 方管型号有哪些 方管的型号有哪些 牌照过户要换新的吗 ...自己一辆江苏牌照的小汽车,名下还能拥有一辆杭州牌照的车吗?_百度... 方管有哪些厚度 国标方管的厚度有哪些规格? 学龄前,应该教会孩子哪些技能才合适? 对学龄前孩童来说什么最重要? 聊聊咱们班作文300字 Android studio如何通过jni调用openssl生成的.so动态链接库 关于班级里的变化写一篇作文 openssl中libeay32.lib怎么静态链接 《新学期的变化》作文。不少于三百字。 在安装openssl时,编译动态链接库的时候,出现了以下错误,求大神帮忙解决!!! 我们班xx变了作文写人 openssl 验证证书链是否有效 班级的变化作文 急! openssl证书生成工具如何生成证书链 我们班的变化。班貌,纪律学习作文 openssl 怎么生成证书链? 作文《我们班变了》 作文小学三年级。班的变化 我们班的变化作文仿写故乡 求我,同学,班级的变化的作文 关于班级新气象的作文怎么写 班级变化作文 我要一篇关于 我在班里的变化 的作文 作文{我们的班级变化大}600字 作文(我们班的新变化)(四年级) 如何在本地配置https服务器 班级变了开头中间提纲结尾作文 openssl 无法定位序数 942 与动态链接库 libeay32.dll 想让libeay32.dll静态链接VC runtime,自己编译openSSL源码,然而总是报错 fedora20无法安装arm-linux-gcc工具链 keytool 生成bks文件,将CA签名后的证书导入到bks中时报错:"不能从回复中建立链"! 地铁用微信怎么使用 徐州云闪付乘地铁怎么操作? 徐州地铁怎么买票? 徐州地铁码怎么改成支付宝扫? 徐州地铁二维码能多人乘车吗,比如带孩子,是否可以连续刷2次进出站? 我的手机小米4老是安装不上微信。其他软件游戏都可以正常安装。恢复 WiFi网速特别慢怎么回事? WiFi网络特别卡怎么办 家用wifi 网速很慢是什么原因? WiFi 连接网速很慢啊,怎么办 wifi网速太慢 WIFI网络很不稳定怎么办 求急~~ 费活量不大人生活当中吃那些食物?