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にアクセスできます。
何かアイデアはありますか?
私は同じ問題を経験し、最終的に解決策を見つけました。多分それはあなたを助けることができるでしょう。
この失敗は、 PKCS#8 形式の秘密鍵が原因でした。
pKCS#8秘密鍵は-----BEGIN ENCRYPTED PRIVATE KEY-----
ヘッダーで始まります
または-----BEGIN PRIVATE KEY-----
ヘッダー
このキーを使用すると、curl
+ openssl
は機能しますが、curl
+ nss
+ libnsspem.so
は機能しません。
で始まるRSA秘密鍵-----BEGIN RSA PRIVATE KEY-----
ヘッダー
curl
+ openssl
とcurl
+ nss
+ libnsspem.so
の両方が機能します。
したがって、このコマンドを使用してください
openssl pkcs8 -in path/to/your/pkcs8/key -out path/to/rsa/key
pKCS#8キーを従来のRSAキーに変換します。
証明書にパスフレーズがある場合は、証明書名の後に追加する必要があります。
curl -k -v "https://myurl.com/" --cert ./certificate.pem:passphrase --key ./private.key