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

Safari中crypto.importKey导入ECDH公钥报参数缺失错误求助

问题根因

这个报错是因为公钥导入时设置了错误的密钥用法(keyUsages)导致的。ECDH密钥协商场景下,deriveKey、deriveBits是仅私钥需要使用的权限,Firefox对用法校验比较宽松,即使公钥配置了这两个权限也能正常导入,但Safari会做严格校验:当检测到导入配置包含派生类权限时,会默认判定你要导入的是私钥,因此会强制校验私钥必备的d字段,公钥没有该字段就会抛出参数缺失错误。

修复方案

导入对方公钥时,将keyUsages参数设置为空数组即可,修改后的代码如下:

  • JWK格式公钥导入:
crypto.subtle.importKey("jwk", jwkData, { name: 'ECDH', namedCurve : 'P-256' }, true, []).then(...)
  • SPKI格式公钥导入:
crypto.subtle.importKey("spki", base64data, { name: 'ECDH', namedCurve : 'P-256' }, true, []).then(...)
补充说明
  • 你自己的私钥导入逻辑不需要修改,保留原来的["deriveKey", "deriveBits"]权限即可,私钥本身就需要用这两个权限完成密钥协商
  • ECDH密钥协商的逻辑是使用己方私钥调用派生方法,对方公钥仅作为派生参数传入,因此公钥本身不需要配置任何操作权限,空usages完全符合W3C Web Crypto API的规范要求
  • 修改后可以兼容所有支持Web Crypto API的浏览器,不会影响Firefox、Chrome等原有正常运行的环境

内容的提问来源于stack exchange,提问作者Kett Attila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:54:03