使用JSON私钥替代.p12文件:转换报错及代码实现疑问
问题解答
一、openssl rsa命令报错的原因
- 你的私钥是PKCS#8格式(开头标记为
-----BEGIN PRIVATE KEY-----),而openssl rsa默认只识别PKCS#1格式的RSA私钥(开头标记为-----BEGIN RSA PRIVATE KEY-----),直接用该命令读取PKCS#8格式的密钥自然会报错。 - 正确的做法是用
openssl pkcs8命令处理,比如执行:openssl pkcs8 -in jsonkey.key -nocrypt,就能正常读取这个私钥。 - 另外检查下你的文本文件:确保私钥的开头、结尾标记完整(要有
-----END PRIVATE KEY-----),中间的Base64内容没有多余的空格、换行错误,这些格式问题也会导致无法读取。
二、JSON私钥解码后与.p12二进制的区别
完全不等同。
.p12(PKCS#12)是一个容器格式,里面不仅包含私钥,还会打包对应的证书、证书链等内容,而且通常带有密码保护。- JSON里
private_key字段Base64解码后,只是单独的PKCS#8格式私钥的二进制数据,没有证书等其他组件。你原代码里的d2i_PKCS12函数是用来解析PKCS#12容器的,无法直接处理单独的私钥数据。 - 如果要在代码里适配这种情况,需要先把PKCS#8私钥解析为EVP_PKEY结构,再结合对应的证书(需要客户额外提供),用
PKCS12_create之类的函数生成PKCS#12容器,才能复用原有的处理逻辑;或者直接修改代码逻辑,跳过PKCS#12的解析步骤,直接使用解析后的私钥进行谷歌API的认证。
内容的提问来源于stack exchange,提问作者Jeff McKay
相关产品推荐
相关产品推荐

