如何创建仅包含私钥/公钥之一的 .pfx 文件

Posted

技术标签:

【中文标题】如何创建仅包含私钥/公钥之一的 .pfx 文件【英文标题】:How to create .pfx file containing only one of private/public key 【发布时间】:2014-10-26 20:20:25 【问题描述】:

据我所知,.pfx 文件不需要同时包含公钥和私钥。但是,我找不到一种方法来创建一个只包含其中一个的文件。

我需要这个,因为我正在为 .pfx 文件编写验证器,并且我想检查该文件是否同时包含私钥和公钥。出于测试目的,我想创建一些无效的证书。

【问题讨论】:

【参考方案1】:

可能有更短的方法可以在不通过 PEM 的情况下执行此操作,但我不知道。

将私钥提取到 PEM:

openssl.exe pkcs12 -in <pfx_file_name>.pfx -nocerts -out private_key.pem

可选,如果您不希望 PEM 或 PFX 文件中包含密码:

openssl.exe rsa -in private_key.pem -out private_key.pem

将公钥和私钥提取到 PEM:

openssl.exe pkcs12 -in <pfx_file_name>.pfx -out public_and_private_key.pem

仅将公钥导出到 PFX:

openssl.exe pkcs12 -in public_and_private_key.pem -inkey private_key.pem -export -out public_key.pfx -nokeys

仅将私钥导出到 PFX:

openssl.exe pkcs12 -in public_and_private_key.pem -inkey private_key.pem -export -out private_key.pfx -nocerts

【讨论】:

我已经快速测试了它,它似乎很有效【参考方案2】:

提取私钥:

 Openssl.exe pkcs12 -in <pfx_file_name>.pfx -nocerts -out priv.pem

生成的私钥文件 (priv.pem) 将受密码保护,以从私钥中删除密码短语。

 Openssl.exe rsa -in priv.pem -out priv.pem

下一步是从 pfx 文件中提取公钥证书,OPENSSL 中有一个直接命令可以从pfx 文件中提取public key 证书,但生成的文件将包含公钥证书和其他一些信息。要仅提取公钥证书,首先我们需要将 pfx 文件转换为包含 private and public key 的 pem,然后从该 pem 文件中提取公钥证书:

 openssl.exe pkcs12 -in ClientCert1.pfx -out privpub.pem

生成的pem同时包含private and public keys,使用以下命令只提取公钥证书:

 openssl x509 -inform pem -in privpub.pem -pubkey -out pub.pem -outform pem

【讨论】:

我实际上需要它。我已经有单独的私钥和公钥。我需要仅从私钥或公钥创建 .pfx 证书。【参考方案3】:

如果您尝试从公钥/私钥对创建单个 pfx 文件,那么我认为这个问题与this post 重复。

openssl pkcs12 -inkey priv.pem -in pub.cert -export -out pfx_file.pfx

事实证明,我没有足够的声誉来发表评论,否则我会评论你的帖子,而不是“回答”。

【讨论】:

不,我不想那样做。请再次阅读我的问题。

以上是关于如何创建仅包含私钥/公钥之一的 .pfx 文件的主要内容,如果未能解决你的问题,请参考以下文章

有人做过wp上如何从pfx文件中获取私钥吗

pfx文件是不是包含根证书

如何把SSL公钥和私钥转化为PFX格式

仅使用公钥的 CER 证书

加密算法PFX文件提取公钥私钥

如何将私钥证书 (.pfx)、公钥证书 (.cer) 上传到 Azure WebApp