无法设置私钥文件:'。/ cert.pem'类型为PEM

时间:2013-05-18 13:18:50

标签: curl openssl

我使用curl使用公共证书文件从https网站下载数据。

系统信息:

  • 操作系统: fedora 14
  • curl: curl 7.30.0
  • openssl: OpenSSL 1.0.0a-fips

命令是,

curl -v "https://<ip:<port>" --cert "./cert.pem" --cacert "./cacert.pem" --cert-type PEM
* About to connect() to kng.com port 443 (#0)
*   Trying 11.19.37.123...
* Adding handle: conn: 0x8189e68
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x8189e68) send_pipe: 1, recv_pipe: 0
* Connected to fkng.com (11.19.37.123) port 443 (#0)
* unable to set private key file: './cert.pem' type PEM
* Closing connection 0
curl: (58) unable to set private key file: './cert.pem' type PEM

我已经获得.pem文件的所有权限,但仍然卷曲错误。

4 个答案:

答案 0 :(得分:18)

在您使用的选项上读取cURL documentation后,看起来证书的私钥不在同一个文件中。如果它在不同的文件中,您需要使用--key文件并提供密码来提及它。

因此,请确保cert.pem具有私钥(以及证书)或使用--key选项提供。

此外,本文档还提到了这一点     请注意,此选项假定“证书”文件是私钥,并且私有证书已连接!

它们是如何连接的?这很容易。将它们一个接一个地放在同一个文件中。

您可以获得有关此here的更多帮助。

我相信这可能对你有帮助。

答案 1 :(得分:8)

当我使用Open SSL时,我遇到了这个问题,解决方法是将证书拆分为3个文件并使用所有这些文件与Curl进行调用:

openssl pkcs12 -in mycert.p12 -out ca.pem -cacerts -nokeys
openssl pkcs12 -in mycert.p12 -out client.pem -clcerts -nokeys 
openssl pkcs12 -in mycert.p12 -out key.pem -nocerts

curl --insecure --key key.pem --cacert ca.pem --cert client.pem:KeyChoosenByMeWhenIrunOpenSSL https://thesite

答案 2 :(得分:0)

我不确定如果这会帮助任何人,但我收到此错误(虽然我使用php创建它而不是命令行)并修复它我必须确保没有旧的.key或.pem文件在我正在看的目录中。删除它们并使用身份验证制作新文件它完美无缺!

答案 3 :(得分:0)

我有类似的情况,但是我在不同文件中使用了密钥和证书。

就我而言,您可以通过比较哈希值来检查钥匙和锁的匹配情况(请参见https://michaelheap.com/curl-58-unable-to-set-private-key-file-server-key-type-pem/)。这有助于我发现不一致之处。