← 中文资源

简体中文版本

Node.js 报 ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE 或无效密钥错误

通过匹配密钥格式、算法与用途(例如签署用对私钥、验签用对公钥),修复加密密钥错误。

阅读英文原文

症状

加密操作以 ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE 或 like no start line 的 PEM 解析错误失败。密钥可能是操作所需的错误类型,例如把公钥传给 createSign,或文件本身不是合法 PEM。这些错误很精确:模块在尝试操作前就拒绝了密钥,因此修复点在于密钥的类型、格式与用途,而非被签的数据。

诊断

用 openssl pkey -text 查看密钥类型与公私属性;搜索代码中 sign/verify 的密钥用法;检查 PEM 的 BEGIN/END 头尾是否完整。

openssl pkey -in key.pem -noout -text | head

根因

加密操作收到的密钥类型或格式有误,例如签名却给了公钥、或给了非 PEM 文件,加密模块在操作前即拒绝。

修复

让密钥与操作匹配:签名与解密用私钥,验签与加密用公钥。确保文件是含正确头尾的完整 PEM,按正确编码加载,并选择与密钥类型兼容的算法。把 openssl 校验纳入工具链。

验证

重新执行签名与验证,确认合法消息通过、被篡改消息验证失败。篡改检查能证明密钥与算法正确,而不只是调用返回了。

常见陷阱

为绕过错误而把密钥格式随意转换可能破坏安全属性;应使用标准工具导出正确的 PEM/DER。