使用微妙.importKey 在 NodeJS 中导入 RSA-PSS 密钥时遇到问题

问题描述 投票:0回答:1

我正在尝试导入私钥以在 NodeJS 中签署 XML 文件。 为了签署 XML,我使用 xmldsigjs,它要求将密钥传递到由

CryptoKey
获取的
crypto.subtle.importKey
对象中。 根据我的理解,
importKey
采用 DER 格式的密钥。 我使用以下命令生成了密钥和证书:

openssl req -newkey rsa-pss -new -nodes -x509 -days 3650 -pkeyopt rsa_keygen_bits:4096 -sigopt rsa_pss_saltlen:32 -keyout key.pem -out cert.pem

这将创建一个 pkcs8 格式的私钥。当使用此命令生成的任何私钥时,我收到此错误

DataError: Invalid key type
。 这是用于导入密钥的代码。

    const privateKey = await fs.readFile(path.join(__dirname, 'certificates', 'key.pem'), 'utf-8');
    const pemHeader = '-----BEGIN PRIVATE KEY-----';
    const pemFooter = '-----END PRIVATE KEY-----';
    const pemContents = privateKey.substring(pemHeader.length, privateKey.length - pemFooter.length - 1);
    const key = await crypto.subtle.importKey(
      'pkcs8',
      Buffer.from(pemContents, 'base64'),
      { name: 'RSA-PSS', hash: { name: 'SHA-256' } },
      false,
      ['sign'],
    );

当使用我使用在线工具此处创建的另一个密钥时,密钥导入工作正常。 API 规范文档提供了生成密钥的命令。

会不会是我生成密钥的方式错误?

node.js cryptography x509 private-key
1个回答
0
投票

您的库似乎不支持 PKCS#1 v2.1 密钥格式。您应该回退到 PKCS#1 v1.5 格式,如下所示:

openssl req -newkey rsa:4096 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
© www.soinside.com 2019 - 2024. All rights reserved.