Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在saml2 js中为私钥指定密码短语?_Javascript_Node.js_Express_Saml 2.0 - Fatal编程技术网

Javascript 如何在saml2 js中为私钥指定密码短语?

Javascript 如何在saml2 js中为私钥指定密码短语?,javascript,node.js,express,saml-2.0,Javascript,Node.js,Express,Saml 2.0,我在saml passport中看到了这样做的选项,但我已经使用设置了。我的密钥/证书有一个必需的密码短语,否则我会出现错误的解密。是否可以设置此密码短语 以下是SP选项 var sp_options = { entity_id: "/startpoint", private_key: fs.readFileSync(`${dir}src/certs/key.pem`).toString(), certificate: fs.readFileSync(`${dir

我在saml passport中看到了这样做的选项,但我已经使用设置了。我的密钥/证书有一个必需的密码短语,否则我会出现错误的解密。是否可以设置此密码短语

以下是SP选项

var sp_options = {
  entity_id: "/startpoint",
  private_key: fs.readFileSync(`${dir}src/certs/key.pem`).toString(),
  certificate: fs.readFileSync(`${dir}src/certs/cert.pem`).toString(),
  assert_endpoint: '/assert',
  sign_get_request: true
}
var sp = new saml2.ServiceProvider(sp_options)


我希望在私钥下有一个密钥“passphrase”,但没有文档中指定的密钥。

通过在该库中搜索代码,它看起来没有处理密码保护证书的逻辑

一个选项是通过执行以下操作删除密码短语:

openssl rsa -in key.pem -out key_nopass.pem

系统将提示您再次输入密码。新创建的文件,
key\u nopass.pem
不需要密码。

您的saml模块似乎不处理crt/pem的密码短语

你可以在npm上搜索另一个saml模块来处理它,我暂时没有找到

您可能可以使用openssl包装器/加密包装器手动管理pem的解密,但我可能非常复杂

否则,John Cruz似乎是无代码解决方案的最佳选择

如果您想手工操作,您的加密PEM包括:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,05E1DB4ACD187787
这显示了使用的加密算法,这里是des-ede3-cbc,十六进制格式的密码IV,这里是05E1DB4ACD187787

然后您就有了base64加密数据:

2rtyxqlZg/ROAHQRnYyHDpkdk9rgYVhsNrGdBzEySzUG+LRwTU/Z+ihSTKK0f2yj
Zpn/qOsXwq4IS6XOb+Q8M5AAbE7t3jKI14YDAvDK/jQpBLk907oxFqeNte3Qvmrm
OjzHJS/P1JXef4dByhrjlrdL/pNV9ov5dM8cyVcxRUbW6cNapXoSrlXrmNPM....
使用节点加密模块,您现在可以处理解密:

const cipher = crypto.createDecipheriv('DES-EDE3-CBC', Buffer.from(secretKeyHex, "hex"), Buffer.from(ivHex, "hex"));
let c = cipher.update(encryptedPemBase64, 'base64','base64')
c += cipher.final('base64');
请注意,密钥必须具有特定的长度,具体取决于所使用的算法


如果您的密钥是“静态”的,那么这很容易,如果您必须处理大量算法,则可能会很棘手,谢谢。我只是创建了一个没有密码的新证书作为暂时的解决办法。如果我需要对密钥进行加密,这可能是一个更好的解决方案。出于我的目的,我只需要创建一个没有密码短语的新密钥来解决我的问题。不过,我会接受这个正确答案,因为它更直接地回答了我的问题。