web-dev-qa-db-ja.com

curl:(58)クライアントキー-8178をロードできません

curlコマンドでSSLの問題に直面しています。 SSLクライアント証明書と秘密キーを使用してURLにアクセスしたい。

これは私のコマンドです:

$ curl -k -v "https://myurl.com/" --cert ./certificate.pem --key ./private.key

* About to connect() to xx.xx.xx.xx port 23444 (#0)
*   Trying xx.xx.xx.xx... connected
* Connected to xx.xx.xx.xx (xx.xx.xx.xx) port 23444 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* Unable to load client key -8178.
* NSS error -8178
* Closing connection #0
curl: (58) Unable to load client key -8178.

キーはパスワードで保護されています。curlはパスワードの入力を要求しません。これは非常に奇妙です。 --passでパスワードを渡しても、同じエラーが発生します。

引数--keyは考慮されていないようです。なぜなら、ファイルシステムに存在しないfoo.keyに置き換えても、同じエラーが発生するからです。

ただし、使用する場合:

$ wget --certificate=./certificate.pem --private-key=private.key "https://myurl.com/" --no-check-certificate

URLにアクセスできます。

何かアイデアはありますか?

22
hzrari

私は同じ問題を経験し、最終的に解決策を見つけました。多分それはあなたを助けることができるでしょう。

この失敗は、 PKCS#8 形式の秘密鍵が原因でした。

  • pKCS#8秘密鍵は-----BEGIN ENCRYPTED PRIVATE KEY-----ヘッダーで始まります
    または
    -----BEGIN PRIVATE KEY-----ヘッダー

    このキーを使用すると、curl + opensslは機能しますが、curl + nss + libnsspem.soは機能しません。

  • で始まるRSA秘密鍵
    -----BEGIN RSA PRIVATE KEY-----ヘッダー

    curl + opensslcurl + nss + libnsspem.soの両方が機能します。

したがって、このコマンドを使用してください

openssl pkcs8 -in path/to/your/pkcs8/key -out path/to/rsa/key

pKCS#8キーを従来のRSAキーに変換します。

21
jfly

証明書にパスフレーズがある場合は、証明書名の後に追加する必要があります。

curl -k -v "https://myurl.com/" --cert ./certificate.pem:passphrase --key ./private.key
2
whats_done_is