Node导出RSA-PSS公钥SPKI DER后WebCrypto导入报错问题
Node.js导出RSA-PSS公钥到WebCrypto导入时触发"Invalid key type"错误
问题描述
在模拟浏览器环境测试时,从Node.js导出RSA-PSS公钥的SPKI DER格式数据后,使用webcrypto.subtle.importKey方法导入时触发DOMException错误,提示Invalid key type。相同流程对RSA(RSASSA-PKCS1-v1_5)和ECDSA密钥对均能正常运行,仅RSA-PSS出现该问题。
Node端密钥生成代码
generateKeyPair('rsa-pss' as any, { modulusLength: algo.modulusLength.bits, publicExponent: RSADefaultPublicExponentAsNumber, hashAlgorithm: algo.hash || DigestAlgorithm.SHA512, saltLength: algo.saltLength.bytes }, processGeneratedKeys);
注:省略了
publicKeyEncoding和privateKeyEncoding参数,密钥用于内存测试,直接使用KeyObject实例。代码中的as any用于消除TypeScript类型报错(RSAPSSKeyPairKeyObjectOptions的saltLength被错误声明为string),此类型问题不影响当前密钥导入异常。
Node端公钥导出代码
data = this.#impl.export({ type: "spki", format: 'der' });
WebCrypto导入代码
return await this.crypto.subtle.importKey('spki', memory, { name: 'RSA-PSS', hash: algo.hash, }, !!extractable, ["verify"]);
补充信息
- 相同流程下,RSA密钥对(生成时指定
rsa,导入时使用RSASSA-PKCS1-v1_5)在Node与浏览器双向均可正常工作 - ECDSA密钥对也能正常完成导出/导入流程
- 仅RSA-PSS密钥对出现导入错误
内容的提问来源于stack exchange,提问作者Kote Isaev
相关产品推荐
相关产品推荐

