错误代码 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"]
);
}