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

Ayr*_*rat 47 openssl ssl-certificate

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

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

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

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

zer*_*ro0 61

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

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

首先,提取证书:

$ openssl pkcs12 -clcerts -nokeys -in "YourPKCSFile" \
      -out certificate.crt -password pass:PASSWORD -passin pass:PASSWORD
Run Code Online (Sandbox Code Playgroud)

二、CA密钥:

$ openssl pkcs12 -cacerts -nokeys -in "YourPKCSFile" \
      -out ca-cert.ca -password pass:PASSWORD -passin pass:PASSWORD
Run Code Online (Sandbox Code Playgroud)

现在,私钥:

$ openssl pkcs12 -nocerts -in "YourPKCSFile" \
      -out private.key -password pass:PASSWORD -passin pass:PASSWORD \
      -passout pass:TemporaryPassword
Run Code Online (Sandbox Code Playgroud)

现在删除密码:

$ openssl rsa -in private.key -out "NewKeyFile.key" \
      -passin pass:TemporaryPassword
Run Code Online (Sandbox Code Playgroud)

为新的 PKCS 文件整理一下:

$ cat "NewKeyFile.key"  \
      "certificate.crt" \
      "ca-cert.ca" > PEM.pem
Run Code Online (Sandbox Code Playgroud)

并创建新文件:

$ openssl pkcs12 -export -nodes -CAfile ca-cert.ca \
      -in PEM.pem -out "NewPKCSWithoutPassphraseFile"
Run Code Online (Sandbox Code Playgroud)

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

  • 使用 `-export` 时会忽略 `-nodes`,在这种情况下没有记录(参见 openssl 手册页,`-nodes` 仅在从 PKCS#12 导出到 PEM 时列出)。您上次通话仍提示我输入导出密码。如果我只是按回车键,我会得到一个 PKCS#12 文件,它的密码是一个空字符串,而不是一个没有密码的字符串。当我执行 `openssl pkcs12 -in "NewPKCSWithoutPassphraseFile"` 时,它仍然提示我输入导入密码。我可以按回车键就可以了,但是如果没有密码,它甚至不会提示。 (7认同)

Koe*_*en. 47

我发现的最简单的解决方案是

导出到临时 pem 文件

openssl pkcs12 -in protected.p12 -nodes -out temp.pem
#  -> Enter password
Run Code Online (Sandbox Code Playgroud)

将 pem 转换回 p12

openssl pkcs12 -export -in temp.pem  -out unprotected.p12
# -> Just press [return] twice for no password
Run Code Online (Sandbox Code Playgroud)

删除临时证书

rm temp.pem
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案不会创建一个 PKCS#12 w/oa 密码,而是一个密码为“”(空字符串)的解决方案,这是不一样的。 (7认同)

小智 6

这可以很容易地一步完成,无需临时文件:

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

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

完毕。

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

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