使用 p12 文件调用“curl:(58)无法使用客户端证书”

Posted

技术标签:

【中文标题】使用 p12 文件调用“curl:(58)无法使用客户端证书”【英文标题】:Getting "curl: (58) unable to use client certificate" with calls using p12 file 【发布时间】:2016-10-21 16:46:50 【问题描述】:

我在我的 MacOS ElCaptain 上创建了一个 p12 文件,通过 openssl 命令使用 .pem.key 文件:

openssl pkcs12 -export -in <PEM_file>.pem -inkey <PRIVATE_KEY>.key -out <FILENAME>.p12

一切顺利。我可以使用这个 p12 进行 cURL 调用。

当我在我的 Ubuntu 14.04.5 LTS(使用相同的 .pem.key)上执行相同操作时,当我将 cURL 与 p12 一起使用时,我开始收到此消息:

curl: (58) unable to use client certificate (no key found or wrong pass phrase?)

我错过了什么?

【问题讨论】:

【参考方案1】:

curl 支持大约十几种不同的 SSL/TLS 实现,并且提供证书和密钥的方式因构建中使用的实现而异。使用curl -V(上V形)检查。我猜,但不知道,MacOS 构建使用 SecureTransport;我在角落里的 Ubuntu 14.04.4 上的(标准)包肯定使用 OpenSSL。

根据手册页并通过实验在我的 Ubuntu 上确认,此构建需要 PEM 格式文件,而不是 PKCS12。这两个文件与您用作 inputopenssl pkcs12 -export 的文件相同,或者您可以将它们连接起来并将其用于 --cert(这可以工作,因为 PEM 格式分别标记每个块);如果您不再拥有它们,您可以使用openssl pkcs12 -in foo.p12 -out foo.pem(即省略-export)转换回来。

【讨论】:

谢谢你,你拯救了我们的一天.. ;-) 在我的情况下,我还需要将 curl 更新到 7.29 以上的版本

以上是关于使用 p12 文件调用“curl:(58)无法使用客户端证书”的主要内容,如果未能解决你的问题,请参考以下文章

p12到pem文件使用php

使用 PHP 从 p12 证书文件中获取信息

如何使用 openssl 创建 P12 文件

苹果证书导出p12文件

如何在 Keytool 中使用 pem 和密钥文件生成 p12 文件

在 JMeter 中永久使用 p12 文件