--certオプションで試したCURLで証明書を指定する必要がありますが、機能していません。
Curlで呼び出し中にキーストアとパスファースを指定することを教えてください。
する必要があります:
curl --cert certificate_file.pem:password https://www.example.com/some_protected_page
キーストアからclientcertと秘密鍵を取得しようとしたときにこれを経験しました。
Welshによって投稿された上記のリンクは素晴らしいものでしたが、私のredhatディストリビューションには追加のステップがありました。 curlがNSSで構築されている場合(curl --version
を実行して、NSSがリストされているかどうかを確認します)、NSSキーストアにキーをインポートする必要があります。たくさんの複雑な手順を経たので、これは最もクリーンな方法ではないかもしれませんが、うまくいきました
したがって、キーを.p12にエクスポートします
keytool -importkeystore -srckeystore $jksfile -destkeystore $p12file \ -srcstoretype JKS -deststoretype PKCS12 \ -srcstorepass $jkspassword -deststorepass $p12password -srcalias $myalias -destalias $myalias \ -srckeypass $keypass -destkeypass $keypass -noprompt
キーのみを保持するpemファイルを生成します
echo making ${fileroot}.key.pem openssl pkcs12 -in $p12 -out ${fileroot}.key.pem \ -passin pass:$p12password \ -passout pass:$p12password -nocerts
mkdir ~/nss chmod 700 ~/nss certutil -N -d ~/nss
pks12util -i <mykeys>.p12 -d ~/nss -W <password for cert >
これでcurlが機能するはずです。
curl --insecure --cert <client cert alias>:<password for cert> \ --key ${fileroot}.key.pem <URL>
私が述べたように、これを行う他の方法があるかもしれませんが、少なくともこれは私にとっては再現可能です。 curlがNSSサポート付きでコンパイルされている場合、ファイルからクライアント証明書を取得することができませんでした。
前の回答に加えて、curlインストールがhttpsをサポートしていることを確認してください。curl --version
を使用して、サポートされているプロトコルに関する情報を取得できます。
カールがhttpsをサポートしている場合は、前の回答に従ってください。
curl --cert certificate_path:password https://www.example.com
Httpsをサポートしていない場合は、httpsをサポートするcURLバージョンをインストールする必要があります。