如何从 pkcs12 容器中删除私钥密码?

如何从 pkcs12 容器中删除私钥密码?
  1. 我使用 Chrome 的 SSL/export 命令提取了证书。
  2. 然后将其作为 openvpn 的输入 - 在 openvpn 的配置中:
    pkcs12 "path/to/pkcs12_container"
  3. 调用时openvpn ~/openvp_config它会要求输入私钥密码(我使用 Chrome 导出时输入的):
    Enter Private Key Password:...
  4. 我想删除这个密码请求。

问题:如何从 pkcs12 中删除私钥密码?

也就是说,创建不需要密码的pkcs12文件。

(似乎一年前我就已经以某种方式这样做了,现在却忘了。该死。)

答案1

可以通过各种openssl调用来实现。

  • PASSWORD 是您的当前密码
  • YourPKCSFile 是您要转换的文件
  • NewPKCSWithoutPassphraseFile 是无密码的 PKCS12 的目标文件

首先,提取证书:

$ openssl pkcs12 -clcerts -nokeys -legacy -in "YourPKCSFile" \
      -out certificate.crt -password pass:PASSWORD -passin pass:PASSWORD

二、CA密钥:

$ openssl pkcs12 -cacerts -nokeys -legacy -in "YourPKCSFile" \
      -out ca-cert.ca -password pass:PASSWORD -passin pass:PASSWORD

现在,私钥:

$ openssl pkcs12 -nocerts -legacy -in "YourPKCSFile" \
      -out private.key -password pass:PASSWORD -passin pass:PASSWORD \
      -passout pass:TemporaryPassword

现在删除密码:

$ openssl rsa -legacy -in private.key -out "NewKeyFile.key" \
      -passin pass:TemporaryPassword

将新 PKCS 文件的内容放在一起:

$ cat "NewKeyFile.key"  \
      "certificate.crt" \
      "ca-cert.ca" > PEM.pem

并创建新文件:

$ openssl pkcs12 -export -nodes -CAfile ca-cert.ca \
      -in PEM.pem -out "NewPKCSWithoutPassphraseFile"

现在您有一个新的 PKCS12 密钥文件,其私钥部分没有密码。

答案2

最简单的解决方案我发现

导出到临时 pem 文件

openssl pkcs12 -in protected.p12 -nodes -out temp.pem
#  -> Enter password

将 pem 转换回 p12

openssl pkcs12 -export -in temp.pem  -out unprotected.p12
# -> Just press [return] twice for no password

删除临时证书

rm temp.pem

答案3

无需临时文件,只需一步即可轻松完成:

openssl pkcs12 -in "PKCSFile" -nodes | openssl pkcs12 -export -out "PKCSFile-Nopass"

使用密码回答导入密码提示。使用 <CR> 回答导出密码提示

完毕。

请注意,这将处理捆绑包中可能存在的任意数量的中间证书......

我强烈建议您小心处理生成的文件;最好先将 umask 设置为 377(非 unix:这意味着只有所有者可以读取创建的文件。)如果您的默认 umask 是宽松的,我想那是 2 个步骤...

答案4

我的用例是从 fastlane 的文件中删除密码.p12。我尝试了此线程中的所有答案,但后来我偶然发现一些博客文章这最终给了我一个有用的答案。

  1. 将文件导入.p12到 Keychain Access。只需双击文件即可完成。系统将提示您输入私钥密码。输入密码即可。

  2. 将此证书导出为.cer.p12。当提示输入.p12密码时,请确认空文本字段。

    在此处输入图片描述

相关内容