OpenSSL 无法转换从 Cisco ASA 55xx 导出的 PKCS12

OpenSSL 无法转换从 Cisco ASA 55xx 导出的 PKCS12

我已经从 ASA 5510 导出了现有的证书+密钥:

asa5510(config)# crypto ca export MYTRUSTSTORE pkcs12 MYPASSWORD

将输出保存在文件(vpn-cisco.pkcs12)中,现在我尝试将证书和密钥拉入单独的文件中,如下所示:

openssl pkcs12 -in cisco-vpn.pkcs12 -nocerts -out privateKey.pem

我收到的错误:

139708630054816:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
139708630054816:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS12

如果我运行openssl pkcs12 -info ...或任何其他命令,都会出现同样的错误。

我尝试再次导出该文件并使用 ASDM 而不是 CLI 进行比较,但文件完全相同。

谷歌搜索该错误只表明文件的编码可能存在某种错误,但没有具体的细节。

编辑(7 年后):我再次遇到了同样的问题,必须使用相同的证书维护 ASA 和 Zimbra 设置,并且发现了我自己的问题作为可行的答案。

特别感谢所有额外的输入,例如需要清理 p12 文件中的空行等等。

编辑 2:从 ASA 导出的 PKCS12 加密了私钥,ZCS 对此不满意,因此需要删除密码,因此首先提取密钥:

openssl pkcs12 -in cisco-vpn.pkcs12.bin -nocerts -out privateKey.pem

然后输入密码:

openssl rsa -in privateKey.pem -out key_no_pass.txt

答案1

这很奇怪。我遇到了同样的问题,发现这个问题没有答案。然后我做了更多搜索,找到了一个耶鲁大学帖子说他们找到了答案,并链接到这个问题。然而这里没有答案。追溯修复了这个问题,完全支持耶鲁曼。

长话短说:您需要将 pfx 从 Base64 转换为 openssl 的二进制格式。

$ openssl enc -base64 -d -in certfile.pfx -out converted.pfx

然后您可以将其转换为 PEM 并单独获取密钥或证书。

$ openssl pkcs12 -in converted.pfx -out bundle.pem -clcerts -nodes

答案2

如果您在解码时遇到问题,请检查您的文件并删除其中的任何空白行。我们的 ASA 以空格开头保存它们,而 openssl 不喜欢这样。

答案3

遇到了同样的问题,结果发现我的证书是双重 base64 编码的......

答案4

如果您在 Windows 上执行此操作,则可以尝试使用位于 的 openSSL exe "C:\Program Files\Git\usr\bin\openssl.exe"。这对我来说很有效,因为我最初在 Git bash 会话中使用 openssl 时收到此错误。使用 openSSL 时,系统.exe提示我输入 .pfx 密码,这以前从未发生过。(我还在某个时候重新生成了原始 .pfx,以防出现损坏问题)。

相关内容