返回博客

Node.js 错误代码 ERR_OSSL_EVP_UNSUPPORTED

Node.js 错误代码 ERR_OSSL_EVP_UNSUPPORTED 通常与 Node.js 版本和证书参数有关。解决方法包括使用环境变量 `NODE_OPTIONS=--openssl-legacy-provider` 或在 `package.json` 的 `scripts` 节点中配置该选项。此外,确保私钥格式正确,包含 `-----BEGIN PRIVATE KEY-----` 和 `-----END PRIVATE KEY-----` 等标记。如果私钥格式错误,例如仅包含 `Padfadfafccaf...xadfda` 这样的内容,也会导致该错误。

Mt.r
|

错误代码 ERR_OSSL_EVP_UNSUPPORTED

和 Nodejs 版本有一定关系 和证书参数也有一定的关系

$env:NODE_OPTIONS="--openssl-legacy-provider"

set NODE_OPTIONS=--openssl-legacy-provider

补充:
在终端输入一次只能本次生效,如果想永久生效可以在 package.json 文件中修改对应的 scripts 节点的内容如下:

"serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
"build": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",

当然,如果开发提供的格式不对,如 Padfadfafccaf...xadfda,那么就会报错,因为缺少 -----BEGIN PRIVATE KEY----- 这些

// 将 PEM 格式的私钥转换为适用于 Web Crypto API 的格式
async function importPrivateKey(pem) {
  const pemHeader = "-----BEGIN PRIVATE KEY-----";
  const pemFooter = "-----END PRIVATE KEY-----";
  const pemContents = pem
    .replace(pemHeader, "")
    .replace(pemFooter, "")
    .replace(/\s/g, "");
  const binaryDer = window.atob(pemContents);
  const binaryDerArray = new Uint8Array(binaryDer.length);
  for (let i = 0; i < binaryDer.length; i++) {
    binaryDerArray[i] = binaryDer.charCodeAt(i);
  }
  return window.crypto.subtle.importKey(
    "pkcs8",
    binaryDerArray.buffer,
    {
      name: "RSA-OAEP",
      hash: "SHA-1",
    },
    true,
    ["decrypt"]
  );
}