web-dev-qa-db-ja.com

秘密鍵ファイルを設定できません: './cert.pem'タイプPEM

Curlを使用して、パブリック証明書ファイルを使用してhttpsサイトからデータをダウンロードしています。

システムインフォメーション:

  • OS: 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ファイルに対するすべての許可を与えましたが、それでもcurlはエラーをスローしています。

23
user1495372

使用したオプションでcURL documentation を読んだ後、証明書の秘密鍵が同じファイルにないようです。別のファイルにある場合は、-keyファイルを使用して言及し、パスフレーズを指定する必要があります。

そのため、cert.pemに(証明書とともに)秘密鍵があることを確認するか、--keyオプションを使用して提供してください。

また、このドキュメントでは、このオプションでは、プライベートキーとプライベート証明書が連結された「証明書」ファイルを想定していることに注意してください。

それらはどのように連結されますか?とても簡単です。それらを同じファイルに次々に配置します。

これについてさらにヘルプが得られます こちら

これはあなたを助けるかもしれないと信じています。

19
doptimusprime

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
9
Petter Ivarsson

同様の状況ですが、キーと証明書を異なるファイルで使用しています。

私の場合、ハッシュを比較することでキーとロックの一致を確認できます( https://michaelheap.com/curl-58-unable-to-set-private-key-file-server- key-type-pem / )。これは矛盾を特定するのに役立ちました。

1
Andrey Batalov

これが誰にも役立つかどうかはわかりませんが、このエラーが発生しましたが(コマンドラインの代わりにphpを使用して作成していました)、それを修正するには、古い.keyまたは.pemファイルがディレクトリにないことを確認する必要がありました見ていました。それらを削除し、認証で新しいファイルを作成することで、完全に機能しました!

0
user8066845