1

我有以下代码:

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 中运行此代码(此处为现场演示)时,它会打印出来generated key。然而,在 Microsoft Edge 14.14393 中,输出非常奇怪:

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

为什么 Edge 在这里抛出错误?
为什么抛出的错误不是正常的错误对象,而是算法规范?
如何在 Edge 中生成 ECDSA 密钥?

4

1 回答 1

3

根据 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 调用,因为它可能会危及您的系统,但这也可能是解决问题的一种方法。

于 2017-04-26T03:28:28.920 回答