2013-05-18 91 views
18

我正在使用curl从https站点使用公共证书文件下载数据。无法设置私钥文件:'./cert.pem'type PEM

系统信息:

  • OS:的fedora 14
  • 卷曲:卷曲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文件的所有权限,仍然卷曲是抛出一个错误。

感谢

回答

13

你所使用的选项阅读卷曲documentation后,它看起来像证书的私钥是不能在同一个文件。如果它在不同的文件中,则需要使用--key文件和供应密码来提及它。

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

此外,本文档提到 请注意,此选项假定“证书”文件是私钥和专用证书连接!

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

您可以通过here获取更多帮助。

我相信这可能会帮助你。

+0

感谢您的宝贵information..Still我不明白的一件事是我如何从公共证书中检索私钥。我可以使用这个命令获得公共密钥“openssl x509 user1495372

+0

公钥证书不包含私钥。私人钥匙必须由业主安全地保管。如果您没有私钥,则您不是证书的所有者。 – doptimusprime

+0

该命令只会给公钥。 – doptimusprime

0

林不知道如果这将帮助任何人,但我得到这个错误(虽然我用PHP来创建它,而不是命令行),并修复它,我必须确保没有旧的.key或.pem文件在我正在看的目录中。通过删除它们,并使用身份验证制作新文件,它完美地工作!

2

我面对这个问题时,我已经使用SSL打开和解决方案在3个文件分割证书,并使用所有这些做与卷曲的电话:

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 
+0

hmm。确定它在client.pem上设置了你的密码? – Philip

相关问题