密钥生成将算法作为错误抛出

Key generation throws algorithm as error

我有以下代码:

crypto.subtle.generateKey({
  name: 'ECDSA',
  namedCurve: 'P-256',
}, true, ['sign', 'verify']).then(function(key) {
  console.log('generated key');
}).catch(function(err) {
  console.log('error: ' + err + ', as JSON: ' + JSON.stringify(err));
});

当我在 Chrome 或 Firefox 中 运行 这段代码 (live demo here) 时,它会打印出 generated key。然而,在 Microsoft Edge 14.14393 中,输出非常奇怪:

error: [object Object], as JSON: {"name":"ECDSA","namedCurve":"P-256"}

为什么 Edge 在此处抛出错误?
为什么抛出的错误不是普通的错误对象,而是算法规范?
如何在 Edge 中生成 ECDSA 密钥?

根据 Edge 的 Web Cryptography API 文档,目前似乎不支持 ECDSA 算法。

我真的不明白为什么错误与您传递给 generateKey 方法的负载匹配,但对我来说它看起来像一个错误。

关于您可以做什么,您可以使用像 elliptic 这样的库来生成您的密钥客户端。它已经在 Edge 13 下进行了测试,假设您遇到的错误不是由 14 引起的,这似乎是一个很好的解决方案。

const EC = require('elliptic').ec
const ec = new EC('p256')
const key = ec.genKeyPair()

我想您也不想依赖负责生成和发回密钥的 api 调用,因为它可能会危及您的系统,但这也可能是一种获取方式围绕这个问题。