0

我有一个包含私钥的 JSON 文件(从 Google Developer Console for Service Accounts 下载)。对于构建 JWT,当我尝试使用 将私钥作为EVP_PKEY结构加载时PEM_read_bio_PrivateKey(),它会返回NULL(错误)。

代码

const char *private_key = 
   json_object_get_string(json_object_object_get(token_file_obj, 
                                                   "private_key"));
printf("Private key --> [%s]\n", private_key);

/* Not sure whether this is needed, just added all three in case needed X-D */
OpenSSL_add_all_algorithms();
OpenSSL_add_all_ciphers();
OpenSSL_add_all_digests();

BIO *bio = BIO_new_mem_buf(private_key, (int) sizeof(private_key));
if (bio == NULL) {
    printf("Bio is null **** \n");
    return FAILED_OPERATION;
}

EVP_PKEY *pkey = PEM_read_bio_PrivateKey(bio, NULL, 0, NULL);
if (pkey == NULL) {
    printf("Failed operation error code %d\n", errno);
    return FAILED_OPERATION;
}

输出

注意:我已经更改了从输出复制的私钥。

Private key --> [-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFBASCBKYwggSiAgEAAoIBAQC9UzuLuU7z0XTS
aixN0uQSGxxw+Ngbm2CyRr01Fm3Zoi4Df1yoVJKxRLscJgzv4hkVzGXsniUIVuqY
peeZ9VAPdqmx1Oz3w/xPUcy6clINTRgg+/xKUQetuxplN4EY9YuQYp8PVqHO3AiZ
WE+VufX0saITyikMCGvIcNdfEky/Kf7CtniEKw1g0eHzbHdxk06wzYmvHxodVwC0
mf8lQ62uFNvw3t0TVaENm0B64NSL+7uCHPZICxJNW352eKgLxisOgV7v6xIYlFz/
O5xoThkRoychsc338/3Pscqd6HVeQkSG/T4lQTl2TFVwJHEF422d8d9ybXFQ7Xe/
qPbhd2A1AgMBAAECggEACtHDHSLHp4jgiXbOVds3s+4vA5iQ5xD712xR+0LvH6kT
qJ51TlhY8r74B22IPzw3TUbbS0ilWqLm8LbIc8SwYNXZ8EL4ENe3J0xILB6E4GQ3
vQjRe+jCDNRct4ySuNutcGCmcOC1SgZKioLgt3CDZQqytblPm7Oufyutry3zS1hQ
ntgqTbhRaI4PyUaq1b0kytoCdOvDpyfxmFBCIUcWnB6S599FG2i3mMzC2a9Fi8p2
swnYIihicdVOHBDOLVJ7kcpugP6ffZRwDc9MKxLwxgV0QwQiqWp/9r+HwYKanQjg
/R8GsPrfxyLPgN4ylA+1QdpPXeIR3AS2xw47v8HDQQKBgQDhGYcTdV1Ikoif1uKV
YYUprGbkS57kCU+uXaP2Cy1ZZJo7WP5OOc9Qp2meL7e17FL6GasxkJTmL1yzRwZD
3sXrokpGq9NCAptlOP9OsCaW1a24D1SpJuuOsyeub2YnfgyO2LWWXMsfMpAv5gqT
lSQJy1SNyuffzS+t2yUdAA/f9QKBgQDXUIL1V4GKYqHAnDnD9aNf68GNSCT4wPSp
QBcAtYZRD2re9lXgGQOwyw8N1YQvPw7tW+YK6lCwz2GAQjZcTnLvT6S6+AY2f9KL
UKTZ9G84wdAguU58qf4AU/3QlIkqTjmR7plrL/60vgNK974JG/Ndm/c9X9uTC+nA
9ECsVz6XQQKBgCy6A8rsARMQerE342HHNMxpAzDNjc7Fwt1kodWbtvESOkscjbtB
ZV4jRas21AwD3yDuxMNedRefxY2hyS7nLvB5GMUeEyYEmpfsUV5zRdemsZPnB+1s
XFXIZ1QTsnqaYyhnCv3Lhli2lUvPK77TXYvMqQpbjOM9RAIJj0BJ6N2ZAoGAOP+K
OXvoBCKKGVgB/rsXDbx2V3VCvEswOWHK9RgYv3qqWu2xHArjLDkE+i+Mt4kk5XbP
dhJDXBr5/58HjvYBfRKDVC92TZUW4mRtz3jivI6qDw+fFGdX4zRY24+GpBljKhuU
p4hkD+rBKmZc+0JX8W7pS2kF0m5z6e1+9WB/JEECDGGGE234F2dkDyPlSRfQaJMk
gf/S0Oh6tRiXcgRBRoD2523H7VU6mCy0fOc7yvVvUu2aAIWbnrJ0GwWuiB5XcsoP
9IlW6lUvCzm1FG2j1gEzU53IHE4nV9/QFnjwmrTGp863G1sGp4J8j4IGN9rebkzd
UwOpaDRE32RuQyFfP/tMqA==
-----END PRIVATE KEY-----
]
Failed operation error code 0

我尝试过的事情

  1. \n将JSON 文件中的私钥替换为换行符,并将其与使用 printf() 打印的私钥进行比较。两者都有相同的校验和。
  2. 从私钥中删除-----BEGIN PRIVATE KEY-----and并尝试 - 没有用。-----END PRIVATE KEY-----
4

0 回答 0