(节点:13672)UnhandledPromiseRejectionWarning:错误:错误:0909006C:PEM例程:get_name:无起始行

问题描述 投票:0回答:1

我已经研究过这个错误,到目前为止似乎没有什么对我有用。我正在使用 Node.js 和加密库。我的私钥存储在 dotenv 文件中,如下所示:

.env 文件

PRIVATE_KEY = -----BEGIN RSA PRIVATE KEY-----
ezfvDUlrPehGYvlmQq3ReTk8EiO8N0RDvsJqerZJ91Lb6UBGlOyuv/SaxDxwxx/g
....more lines...
5SRwCCIaByIwAw0HkQx+XnBqW8II2TgTb9MMBQht/Cu5WZKFroagGQO5cgyilQg4
-----END RSA PRIVATE KEY-----

索引.ts

const WM_KEY_PRIVATE = process.env.WM_KEY_PRIVATE;
 
function createSignature(reqHeaders: SecurityHeaders) {
const signer = createSign('RSA-SHA256');
const payload = generateSignatureMap(reqHeaders);
console.log("payload:", payload);
signer.update(payload);
signer.end();
return signer.sign(WM_KEY_PRIVATE, 'base64');
}

function generateSignatureMap(reqHeaders: SecurityHeaders) {
let keys: string[] = Object.keys(reqHeaders).sort();
let vals: string[] = [];

for(let k of keys) {
    vals.push(reqHeaders[k].toString().trim());
}
return vals.join('\n') + '\n';
// let keys = reqHeaders.toString()
// return keys
}

任何人都可以指出我正确的方向来消除这个错误吗?我不应该使用 .env 来存储密钥吗?我读到过很难从 .env 文件加载这种格式的密钥,但我还没有找到真正可靠的解决方案。我也尝试过将其全部变成一行。任何有助于理解这一点的帮助将不胜感激。谢谢你。

cryptography rsa private-key pem
1个回答
0
投票

我遇到了同样的错误 -

error:0909006C:PEM routines:get_name:no start line
- 在 C 中使用 libcrypto (OpenSSL)。所以环境不同,但也许这对其他人有用。

就我而言,我的证书位于字符串中,并且转换为 X509 类型总是失败。但当从文件中读取证书时它就起作用了。

问题是缺少

\n
,正如 @dave_thompson_085 在对 OP 问题的评论中所建议的那样。

不起作用:不
\n

static const char *C1 = "-----BEGIN CERTIFICATE-----"
"MIIEoTCCAwmgAwIBAgIJANEHdl0yo7CWMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV"
(...)
"tQAVo+yVgLgV2Hws73Fc0o3wC78qPEA+v2aRs/Be3ZFDgDyghc/1fgU+7C+P6kbq"
"d4poyb6IW8KCJbxfMJvkordNOgOUUxndPHEi/tb/U7uLjLOgPA=="
"-----END CERTIFICATE-----";

修复版本

static const char *C1 = "-----BEGIN CERTIFICATE-----\n"
"MIIEoTCCAwmgAwIBAgIJANEHdl0yo7CWMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNV\n"
(...)
"tQAVo+yVgLgV2Hws73Fc0o3wC78qPEA+v2aRs/Be3ZFDgDyghc/1fgU+7C+P6kbq\n"
"d4poyb6IW8KCJbxfMJvkordNOgOUUxndPHEi/tb/U7uLjLOgPA==\n"
"-----END CERTIFICATE-----\n";

注意每行末尾的

\n

© www.soinside.com 2019 - 2024. All rights reserved.