Node.js crypto 无法从文件中签署 pem 密钥字符串,错误为:25066067:DSO 支持例程:dlfcn_load:无法加载共享库

Den*_*zus 15 base64 openssl pem node.js cryptojs

我的 Git 目录中有两个并行运行的节点项目。

相同版本的节点 14.5,根中相同的 pem 密钥,一切都相同。然而,一个节点进程能够签署我的 base64 pem 密钥,而另一个节点进程则不能。我可以删除 base64 设置,但仍然有一个进程处理符号,而另一个则不处理。

我从 sign.sign() 方法收到此错误消息。

错误:25066067:DSO 支持例程:dlfcn_load:无法加载共享库

代码如下:

const crypto = require('crypto');

var policy = {
 Statement: [
  {
   Resource: 'https://dev.geolytix.io/mapp/workspace.json',
   Condition: { DateLessThan: { 'AWS:EpochTime': Date.now() + 60 * 60 * 1000 } },
  },
 ],
};
  
var sign = crypto.createSign('RSA-SHA1');

sign.write(JSON.stringify(policy));

var pem = String(readFileSync(join(__dirname, `./mykey.pem`)))

let signature = sign.sign(pem, 'base64')
Run Code Online (Sandbox Code Playgroud)

我注意到将操作系统更新到 Ubuntu 22.04 后出现了问题。

我已清除 openssl(版本 3)并从源代码手动安装 openssl 1.1.1o。https://fedingo.com/how-to-install-openssl-in-ubuntu/ 不幸的是,这将删除其他需要较新版本 OpenSSL 的应用程序,例如 Chrome。

我现在可以手动构建和安装 openssl 3.0.3。加密模块仍然失败。

Air*_*err 21

作为快速修复,请运行:

export OPENSSL_CONF=/dev/null

或者,将您的节点至少升级到v18.x.


这两个答案均来自评论。我真正想添加的是如何在 Heroku 环境中设置 OPENSSL_CONF。在您的应用程序设置中,在“配置变量”下执行以下操作:

如何设置 OPENSSL_CONF