如何从 .SPC(代码签名证书)和 .PKCS12(私钥)生成 PKCS12 (.p12)?

Posted

技术标签:

【中文标题】如何从 .SPC(代码签名证书)和 .PKCS12(私钥)生成 PKCS12 (.p12)?【英文标题】:How to generate a PKCS12 (.p12) from a .SPC (code signing certificate) and .PKCS12 (private key)? 【发布时间】:2012-02-25 02:20:54 【问题描述】:

我有一个来自 GoDaddy 的代码签名证书 (SPC) 文件。该文件是从现有的私钥生成的:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAvcG2SEalg9pvkTvtMI8cZg07tVA0RuK7LeGlFdk1smXgqrsH
.... snipped ....
MURwR0FXgNAuFNQ0yBNFNW2+o9uBceLuCSUalgi4pQw1uBmP5QkUYA==
-----END RSA PRIVATE KEY-----

我生成了一个证书签名请求并将其发送给 GoDaddy:

-----BEGIN CERTIFICATE REQUEST-----
MIICiDCCAXACAQAwQzFBMD8GCSqGSIb3DQEJARYyYXBwbGVAdGVrNC1uZXdtZWRp
.... snipped ....
nJwd9pSDPuYaNHl33N1BJkXFusG7ta0D6UjisA==
-----END CERTIFICATE REQUEST-----

GoDaddy 然后返回给我一个 SPC 文件。我的研究表明,通常你会有一对 SPC/PVK,但显然我的私钥不是 PVK 类型的。 我已经尝试了几种方法(pvkimprt、pvk2pfx、openssl、keytool),但似乎无法将我的密钥转换为 PVK 类型或我的 SPC 独立地转换为 PKCS12 类型,而证书 (SPC) 和私钥都在一个密钥中-商店。

我似乎需要一步完成的命令是: openssl pkcs12 -in cert_from_godaddy.spc -inkey private.key -export -out full_code_signing_chain.pkcs12

但是,运行时我会得到: 将“屏幕”加载到随机状态 - 完成 没有证书与私钥匹配

但是,证书 (SPC) 用于私钥。我做错了什么?!

背景:我正在尝试生成一个 .p12 文件签名 Adob​​e AIR 应用程序

【问题讨论】:

【参考方案1】:

说实话,我完全无法理解您要做什么。

您取回了 SPC 文件,它只是带有您的证书的 #PKCS7 der 编码。

你也有你的私钥。

您需要做的就是将证书导入 pkcs12 密钥库,以使用您的私钥获得签名证书。

【讨论】:

虽然这本身并没有回答问题,但它实际上导致了答案......知道 SPC 只是 DER/PKCS7 我使用openssl pkcs7 -inform DER -on godaddy.spc -outform PEM -out out.p12 来获得我需要的东西。 @user72003 命令中有语法错误... -on 应该是 -in 给出:openssl pkcs7 -inform DER -in godaddy.spc -outform PEM -out out.p12【参考方案2】:

以下是我从 GoDaddy 的 .spc 文件创建 .p12 文件的方法: 1. 右键单击​​ myCert.spc,安装证书(将 .spc 安装到 Windows 中) 2. 双击 myCert.spc(在 certmgr 中打开),导出为 .cer 文件。 3. 将该 .cer 文件导入 Firefox。 4. 使用 Firefox:备份刚刚导入的内容以创建 .p12 文件。

然后您可以使用该 .p12 文件对您的代码进行签名。

【讨论】:

【参考方案3】:

要从私钥和 SPC 文件创建 P12 信任库,请使用 OpenSSL 执行以下步骤:

    (可选):从旧的 P12 信任库中提取私钥:

openssl pkcs12 -in old.p12 -nocerts -out privateKey.pem

    从 SPC 文件中提取证书链:

openssl pkcs7 -inform DER -outform PEM -in godaddy.spc -print_certs > certificates.pem

    创建新的 P12 信任库:

openssl pkcs12 -export -out new.p12 -inkey privateKey.pem -in certificates.pem

【讨论】:

以上是关于如何从 .SPC(代码签名证书)和 .PKCS12(私钥)生成 PKCS12 (.p12)?的主要内容,如果未能解决你的问题,请参考以下文章

ktor sslConnector 从 jar p12 pkcs12 jks 密钥库和 mtls 相互 ssl 连接中服务/读取

从 php 中的 PKCS7 签名中提取证书

通过 Windows 中的 OpenSSL 为我的 Android 应用程序创建带有自签名证书的 PKCS#12 文件

在 C++ 中使用智能卡创建证书签名请求

将 GoDaddy 颁发的 .spc 和 .key 文件加入完整的 .pfx / .cer 证书

查找证书是自签名的还是 CA 签名的