使用 OpenSSL 实现私钥和证书的转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 OpenSSL 实现私钥和证书的转换相关的知识,希望对你有一定的参考价值。

近期在项目中ios需要用到APNs的推送,而公司的iOS女同事(纯哥)只给了我2个p12格式的文件。突然发现,证书的转换问题还是比较常见的,比如之前支付开发。而在程序中,实际需要使用的是pem格式的证书,因此这里涉及到证书之间的转换问题。

由于私钥和证书可以以不同格式的存储,这意味着我们需要对它们进行转换(腾云科技TY300.COM)。而大多数常用的格式如下,首先是证书的格式:

二进制的DER证书,包含X.509证书为原始格式,使用DER ASN.1编码。
ASCII的PEM证书,包含1个base64编码的DER证书,以-----BEGIN CERTIFICATE-----开头而以-----END CERTIFICATE-----结束。
PKCS#7证书,1个复杂格式的设计用于传输签名或加密数据,定义在RFC 2315中。通常以.p7b和.p7c作为后缀且可以包含整个证书链。这种格式被Java的keytool工具支持。
PKCS#12(PFX)的证书和私钥,1个复杂的格式它可以存储和保护1个服务器的私钥并和1个完整的证书链一起。它通常以.p12和.pfx为后缀。这种格式常用于微软的产品,不过也可以用于客户端证书。
然后是对应的私钥的格式:

二进制的DER私钥,包含1个私钥以原始形式,使用DER ASN.1编码。OpenSSL(基础教程qkxue.net)以它传统的SSLeay格式创建私钥,不过也可以使用另外1种称为PKCS#8,但不广泛使用的格式(定义在RFC 5208)。在OpenSSL中可以使用pkcs8命令来进行PKCS#8格式的处理操作。
ASCII格式的私钥,包含1个base64编码的DER私钥,有些时候有一些额外的元信息,例如密码保护采用的算法。
说了这么多,可以发现对于私钥之间的转换就简单的很多,只能在DER和PEM格式之间进行转换。而相比证书之间的转换,就稍微复杂一些。

以上是关于使用 OpenSSL 实现私钥和证书的转换的主要内容,如果未能解决你的问题,请参考以下文章

openssl将私钥和crt证书合成pfx证书

用openssl生成SSL使用的私钥和证书,并自己做CA签名

java通过command调用openssl生成私钥和证书

HP通过OpenSSL生成证书密钥并且加密解密数据,以及公钥,私钥和数字签名的理解

OpenSSL 下载和私钥证书CERTIFICATE证书生成

从 kpcs7 (.p7b) 文件中提取私钥和证书