k6调用webcrypto generateKey报NotSupportedError问题咨询
问题:k6实验性WebCrypto执行ECDSA密钥生成报错,Node.js版本正常运行
我正在使用k6 JavaScript API执行测试,由于k6对第三方库支持有限,因此使用k6/experimental/webcrypto进行椭圆曲线(EC)加密:
import { crypto } from "k6/experimental/webcrypto"; export function generateKeyPair() { crypto.subtle.generateKey( { name: "ECDSA", namedCurve: "P-256" }, true, ["sign", "verify"], ).then((keypair) => { console.log(keypair) }) }
调用该函数时出现错误:ERRO[0009] Uncaught (in promise) NotSupportedError。
但在Node.js中使用@peculiar/webcrypto模块执行相同逻辑的代码却无报错:
const { Crypto } = require("@peculiar/webcrypto"); function keygenPerculiarCrypto(){ const crypto = new Crypto(); crypto.subtle.generateKey( { name: "ECDSA", namedCurve: "P-256" }, true, ["sign", "verify"], ).then((keypair) => { console.log(keypair) }) }
请问为何k6版本代码无法正常运行,而Node.js版本可以?
原因分析
k6实验性WebCrypto支持范围有限
k6/experimental/webcrypto作为实验性模块,并未完全实现WebCrypto标准的所有算法和曲线。你使用的ECDSA-P-256组合目前不在该模块的支持列表中,因此触发NotSupportedError。@peculiar/webcrypto是完整标准实现
Node.js中使用的@peculiar/webcrypto是专门为兼容WebCrypto API开发的第三方库,它完整覆盖了WebCrypto标准定义的所有算法,包括ECDSA-P-256,因此可以正常生成密钥对。
解决思路
- 先确认k6官方文档中
k6/experimental/webcrypto当前支持的算法列表,尝试使用已支持的EC曲线(比如部分版本可能支持P-384) - 如果必须使用P-256的ECDSA,可以考虑通过k6的
http模块调用外部密钥生成服务,或者等待k6完善实验性WebCrypto的算法支持。
内容的提问来源于stack exchange,提问作者HapaxLegomenon
相关产品推荐
相关产品推荐

