【问题标题】:How do I specify the passphrase for a private key in saml2-js?如何在 saml2-js 中指定私钥的密码?
【发布时间】:2020-12-23 17:15:37
【问题描述】:

我在 saml-passport 中看到了执行此操作的选项,但我已经使用 saml2-js 进行了设置。我的密钥/证书有一个必需的密码,否则我收到错误的解密错误。是否可以设置此密码?

这里是 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)

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

【问题讨论】:

    标签: javascript node.js express saml-2.0


    【解决方案1】:

    您的 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');
    

    请注意,密钥必须具有特定长度,具体取决于所使用的算法

    如果您的密钥是“静态的”,这很容易,但如果您必须处理大量算法,则可能会很棘手

    【讨论】:

    • 如果我需要对密钥进行加密,这可能是一个更好的解决方案。出于我的目的,我只需要创建一个没有密码的新密钥来解决我的问题。但是,我会接受这个作为正确答案,因为它更直接地回答了我的问题。
    【解决方案2】:

    通过查看该库中的代码,它看起来不具备处理受密码保护的证书的逻辑。

    一种选择是通过执行以下操作删除密码:

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

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

    【讨论】:

    • 谢谢。我现在只是创建了一个没有密码的新证书作为解决方法。
    猜你喜欢
    • 2022-09-25
    • 2015-05-13
    • 2020-02-29
    • 2023-03-13
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多