You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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版本可以?


原因分析

  1. k6实验性WebCrypto支持范围有限
    k6/experimental/webcrypto作为实验性模块,并未完全实现WebCrypto标准的所有算法和曲线。你使用的ECDSA-P-256组合目前不在该模块的支持列表中,因此触发NotSupportedError。

  2. @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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:35:05