使用OpenSSL从PKCS#12文件导出证书和私钥

请注意: 本文不适用于 SSL.com 代码签名和文档签名证书。 这些类型的证书的私钥无法导出,也无法生成为 .pfx 文件。 SSL.com 代码签名和文档签名证书及其私钥只能生成并存储在 eSigner 云签名环境,以 Yubikey 设备,或支持的 云HSM.

本操作方法将引导您逐步使用OpenSSL从PKCS#12文件中提取信息。 PKCS#12(也称为PKCS12或PFX)是一种二进制格式,用于将证书链和私钥存储在单个可加密文件中。 PKCS#12文件通常用于在Windows和macOS计算机上导入和导出证书和私钥,并且通常具有文件扩展名 .p12 or .pfx.

如需更多有用的操作方法和最新的网络安全新闻,请在此处注册 SSL.com 的时事通讯:

什么是OpenSSL?
OpenSSL是一个非常有用的开源命令行工具包,可用于 X.509 证书,证书签名请求(CSRs)和加密密钥。 如果使用的是Linux或macOS之类的UNIX变体,则您的计算机上可能已经安装了OpenSSL。 如果您想在Windows上使用OpenSSL,则可以启用 Windows 10的Linux子系统 或安装 Cygwin的。 您也可以轻松地 创建信息图 一个带有openSSL的PKCS#12文件。

SSL.com提供了多种 SSL /TLS 服务器证书 用于HTTPS网站。

比较SSL /TLS 证书

视频

https://www.youtube.com/watch?v=S_imVMFOdhU

在下面显示的所有示例中,用您实际使用的文件名代替 INFILE.p12, OUTFILE.crtOUTFILE.key.

在屏幕上查看PKCS#12信息

要将PKCS#12文件中的所有信息转储到 PEM格式,请使用以下命令:

openssl pkcs12 -info -in INFILE.p12 -nodes

然后,将提示您输入PKCS#12文件的密码:

输入导入密码:

输入创建PKCS#12文件时输入的密码,然后按 enter。 OpenSSL会将文件中的所有证书和私钥输出到屏幕:

袋属性localKeyID:AC 3E 77 9A 99 62 84 3D 77 CB 44 0D F9 78 57 7C 08 28 05 97 subject = / CN = Aaron Russell/emailAddress=*********@gmail.com issuer = / C = US / ST =得克萨斯/ L =休斯顿/ O = SSL公司/ CN = SSL.com客户端证书中间CA RSA R1 ----- BEGIN CERTIFICATE ----- MIIF1DCCA7ygAwIBAgIQcOrAJCMayJsZBKJsyz / aQDANBgkqhkiG9w0BAQsFADB + MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0b24x ETAPBgNVBAoMCFNTTCBDb3JwMTowOAYDVQQDDDFTU0wuY29tIENsaWVudCBDZXJ0 ... bwK6ABAZUq6QcvhD0LYsXya + ncDCR6wxb9E0DWd4ATQMzxGTu / yE3kT + 9Ef6IY + n armh3HZUfan2Hb64YD0tjLMca / PC + sKAZu28gB / 3HQRHIFugvh6RO3bIoorl0jUg 1Ml2R83 ++ PRIVATE-SUHL0 ----

加密私钥

如果您想加密私钥并在输出之前使用密码对其进行保护,则只需省略 -nodes 来自命令的标志:

openssl pkcs12 -info -in INFILE.p12

在这种情况下,OpenSSL输出任何证书后,系统将提示您输入并验证新密码,并且私钥将被加密(请注意,密钥的文本以 -----BEGIN ENCRYPTED PRIVATE KEY-----):

输入PEM密码短语:验证 - 输入PEM密码短语:----- BEGIN加密的私有密钥----- MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIGwhJIMXRiLQCAggA MBQGCCqGSIb3DQMHBAiXdeymTYuedgSCBMjwGg78PsqiNJLfpDFbMxL98u3tK9Cs ... SGVCCBj5vBpSbBXAGbOv74h4satKmAMgGc8SgU06geS9gFgt / wLwehMJ / H4BSmex 4S / 2tYzZrDBJkfH9JpggubYRTgwfAGY2BkX03dK2sqfu + QVTVTKMj2VI0sKcFfLZ BDW = ----- END ENCRYPTED私钥----

仅提取证书或私钥

如果只想输出私钥,请添加 -nocerts 到命令:

openssl pkcs12 -info -in INFILE.p12 -nodes -nocerts

如果只需要证书,请使用 -nokeys (由于我们不关心私钥,因此我们也可以安全地省略 -nodes):

openssl pkcs12 -info -in INFILE.p12 -nokeys

将证书和私钥保存到文件

您可以从PKCS#12文件中导出证书和私钥,并通过指定输出文件名将它们以PEM格式保存到新文件中:

openssl pkcs12 -in INFILE.p12 -out OUTFILE.crt-节点

同样,系统将提示您输入PKCS#12文件的密码。 和以前一样,您可以通过删除 -nodes 从命令中标记和/或添加 -nocerts or -nokeys 仅输出私钥或证书。 因此,要生成私钥文件,我们可以使用以下命令:

openssl pkcs12 -in INFILE.p12 -out OUTFILE.key -nodes -nocerts

要创建仅包含证书的文件,请使用以下命令:

openssl pkcs12 -in INFILE.p12 -out OUTFILE.crt -nokeys

将私钥转换为PKCS#1格式

上面的示例均以OpenSSL的默认值输出私钥 PKCS#8 格式。 如果你知道你需要 PKCS#1 相反,您可以根据密钥类型将OpenSSL的PKCS#12实用程序的输出传递到其RSA或EC实用程序。 以下两个命令都将以PKCS#1格式输出密钥文件:

RSA

openssl pkcs12 -in INFILE.p12-节点-nocerts | openssl rsa -out OUTFILE.key

ECDSA

openssl pkcs12 -in INFILE.p12-节点-nocerts | openssl ec -out OUTFILE.key

请注意: 您可以通过查看文本的第一行来区分PKCS#8和PKCS#1私钥文件之间的区别。 PKCS#1文件将指定算法:
-----BEGIN RSA PRIVATE KEY-----

PKCS#8文件未显示该算法,并且也可能被加密:
-----BEGIN PRIVATE KEY-----
or
-----BEGIN ENCRYPTED PRIVATE KEY-----


感谢您选择SSL.com! 如有任何疑问,请通过电子邮件与我们联系 Support@SSL.com,致电 1-877-SSL-SECURE,或只需单击此页面右下方的聊天链接。

订阅 SSL.com 的时事通讯

不要错过SSL.com上的新文章和更新

保持信息灵通和安全

SSL.com 是网络安全领域的全球领导者, PKI 和数字证书。注册以接收最新的行业新闻、提示和产品公告 SSL.com.

我们希望收到您的反馈

参加我们的调查,让我们知道您对最近购买的想法。