.pem我通过 openssl 命令使用and文件在 MacOS ElCaptain 上创建了一个 p12 文件.key:
openssl pkcs12 -export -in <PEM_file>.pem -inkey <PRIVATE_KEY>.key -out <FILENAME>.p12
Run Code Online (Sandbox Code Playgroud)
一切顺利。我能够使用这个 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?)
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
curl支持大约十几种不同的 SSL/TLS 实现,并且提供证书和密钥的方式取决于您的构建中使用的实现。使用curl -V(上V)来检查。我猜测,但不知道,MacOS 构建使用 SecureTransport;我的 Ubuntu 14.04.4 上的(标准)包肯定使用了 OpenSSL。
根据手册页并通过我的 Ubuntu 上的实验证实,此版本需要 PEM 格式文件,而不是 PKCS12。这些与您用作输入的两个文件相同openssl pkcs12 -export,或者您可以将它们连接起来并仅将其用于--cert(这可以工作,因为 PEM 格式单独标记每个块);如果您不再拥有它们,您可以使用openssl pkcs12 -in foo.p12 -out foo.pem(即 OMIT -export)转换回来。