web-dev-qa-db-ja.com

SSL証明書とパスワードを渡すCURL

--certオプションで試したCURLで証明書を指定する必要がありますが、機能していません。

Curlで呼び出し中にキーストアとパスファースを指定することを教えてください。

11
Adam

する必要があります:

curl --cert certificate_file.pem:password https://www.example.com/some_protected_page
20
Welsh

キーストアから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サポート付きでコンパイルされている場合、ファイルからクライアント証明書を取得することができませんでした。

4
Carl Zmola

前の回答に加えて、curlインストールがhttpsをサポートしていることを確認してください。
curl --versionを使用して、サポートされているプロトコルに関する情報を取得できます。

カールがhttpsをサポートしている場合は、前の回答に従ってください。

curl --cert certificate_path:password https://www.example.com

Httpsをサポートしていない場合は、httpsをサポートするcURLバージョンをインストールする必要があります。

3
vionixt