![从 Firefox 导出 PKCS12 格式的证书](https://linux22.com/image/1320609/%E4%BB%8E%20Firefox%20%E5%AF%BC%E5%87%BA%20PKCS12%20%E6%A0%BC%E5%BC%8F%E7%9A%84%E8%AF%81%E4%B9%A6.png)
我已将证书导入 Firefox,我想将其导出为 PKCS12 格式。我发现的唯一选项是 PKCS7、PEM 和 DIR。而不是 PKCS12。我怀疑证书没有私钥,有没有什么方法可以检查?
编辑我的问题出在 Chrome 浏览器上,我申请证书时用的是这个浏览器。它似乎在存储私钥方面有问题。我用 Firefox 重复了请求,一切正常。
答案1
您可以在 Firefox 中查看证书内容
(Tools -> Options -> Advanced -> Encryption -> View Certs -> Yours/Authority/etc -> <cert> -> View -> Details -> Certificate Fields -> Public Key
)
如果你可以导出到 PEM,则可以将其转换为 PKCS12
# export mycert.pem as PKCS#12 file, mycert.pfx
openssl pkcs12 -export \
-out mycert.pfx -in mycert.pem \
-name "My Certificate"
更新:使用 OpenSSL 的示例
生成自签名证书
$ openssl req \
> -x509 -nodes -days 365 \
> -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
查看其内容
$ openssl x509 -in mycert.pem -noout -text
查看 PEM 文件
$ cat mycert.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDa6JQOLkwoIGhTvcTSYX68Ddaq4hGk/61RSVELaVFJTNQYPB86
…
aPj0KoeFJ04/sLcZNZwGcC93rNA66xTICLtGbBXlM1U=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICxTCCAi6gAwIBAgIJAOaxxgLFlypwMA0GCSqGSIb3DQEBBQUAMEwxCzAJBgNV
…
tz0TMEYxbGIscZbxeJxoK6pe5tOwXtdjStlcITzksdPV5rLp84aeJl4=
-----END CERTIFICATE-----
请注意,虽然 PEM 文件可以同时包含私钥和证书,但私钥不是 X.509 证书的一部分。
如果 FF 导出的 PEM 缺少 Base64 编码数据周围的 BEGIN 和 END 标记,OpenSSL 就无法读取 PEM 文件。
这是我从 Firefox 导出的 CA 证书(*在记事本中查看)
-----BEGIN CERTIFICATE-----
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
…
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
-----END CERTIFICATE-----
(省略号…为简洁起见省略了数据)
openssl x509 -in ff.crt -noout -text
我可以使用(我从 Windows 剪切并粘贴到 Linux,但您也可以在 Windows 上安装 openssl)查看是否正常
答案2
那是因为你没有相应的私钥该证书。
在密码学中,PKCS #12 是一种捆绑密钥格式,通常用于将私钥与其 X.509 证书一起存储。有关更多信息,请参阅维基百科这里。
如果您的浏览器中有属于该证书的私钥,则只能导出 PKCS #12 格式的证书。这必须与您用于生成密钥签名证书的计算机和浏览器相同。请参阅CaCert 的知识库文章更清楚的解释:
“ 您的密钥包含在密钥“存储”中。您可以将公钥/私钥对从存储中导出到文件中,并可选择(但强烈推荐!)使用密码保护它们。这通常是通过进入浏览器(即 Firefox)的“管理证书”部分,然后执行密钥的“备份”来完成的。这将创建一个带有 .P12 或 .PFX 后缀的文件。
“
答案3
您可以使用以下方式列出 Firefox 密钥存储中的私钥:证书实用程序从Mozilla 的 NSS 工具:
certutil -K -d PATH_TO_YOUR_PROFILE_DIRECTORY
这些可以与证书存储中的证书列表进行匹配:
certutil -L -d PATH_TO_YOUR_PROFILE_DIRECTORY
因此你可以通过匹配密钥和证书的昵称来判断你是否拥有相应的证书和密钥。
要导出具有特定昵称(如上述命令所列)的密钥和证书,您可以使用pk12实用程序:
pk12util -o OutFile.p12 -n "NICKNAME" -d PATH_TO_YOUR_PROFILE_DIRECTORY
注意:如果您使用 Firefox 的证书管理器并看到错误:“由于未知原因,无法创建 PKCS #12 备份文件。”这可能是因为 Firefox 使用的是操作系统的钥匙串而不是自己的钥匙串。您可以在 Firefox 证书管理器中检查这个问题,并查看“安全设备”列 - 如果显示“操作系统客户端证书令牌(现代)”,那么这可能是问题所在,但如果显示“软件安全设备”,那么它使用的是 Firefox 自己的钥匙串,因此可能是另一个问题。