使用带密码保护的私钥和crypto.createSign

Arn*_*sen 8 openssl cryptography node.js

我正在尝试使用node.js加密API和密码保护的私钥来签名并验证消息,这样就可以获得以下信息:

> var sig = crypto.createSign('RSA-SHA256').update('psst').sign(pk,'hex');
Enter PEM pass phrase:
Run Code Online (Sandbox Code Playgroud)

并且节点在此时锁定.我似乎无法找到以编程方式传递密码的选项.

Tho*_*don 8

更新:我将其修复为核心

我对此的解决方案刚刚落入核心,尚未正式发布,但是当它发布时,您可以像这样使用它:

var sig = crypto.createSign('RSA-SHA256').update('psst').sign({
  key: pk,
  passphrase: 'password'
}, 'hex');
Run Code Online (Sandbox Code Playgroud)

一旦发布,它将更新.登陆v0.11.8发布.

原答案:

这是一个有效的解决方案,您可以在应用启动时解密私钥,然后正常使用它,例如:

var  childProcess = require('child_process'),
  crypto = require('crypto');

var pk;

var sign = function () {
  var sig = crypto.createSign('RSA-SHA256').update('psst').sign(pk,'hex');
  console.log(sig);
};

childProcess.exec('openssl rsa -in /path/to/private_key -passin pass:your_password', {},
    function (err, stdout, stderr) {
  if (err) throw err;
  pk = stdout; // Save in memory for later use
  sign();
});
Run Code Online (Sandbox Code Playgroud)