web-dev-qa-db-fra.com

CURL pour passer le certificat SSL et le mot de passe

J'ai besoin de spécifier un certificat avec CURL j'ai essayé avec l'option --cert cela ne fonctionne pas.

Pourriez-vous s'il vous plaît laissez-moi savoir pour spécifier le keystore et passpharse lors de l'appel avec curl?

11
Adam

Devrait être:

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

Je suis passé par là lorsque j'essayais d'obtenir un clientcert et une clé privée d'un magasin de clés.

Le lien ci-dessus publié par welsh était génial, mais il y avait une étape supplémentaire sur ma distribution de redhat. Si curl est construit avec NSS (exécutez curl --version pour voir si NSS figure dans la liste), vous devez alors importer les clés dans un magasin de clés NSS. J'ai traversé un tas d'étapes alambiquées, donc ce n'est peut-être pas la façon la plus propre, mais ça a fait fonctionner

Exportez donc les clés en .p12

keytool -importkeystore -srckeystore $jksfile -destkeystore $p12file \
        -srcstoretype JKS -deststoretype PKCS12 \
        -srcstorepass $jkspassword -deststorepass $p12password  
        -srcalias $myalias -destalias $myalias \
        -srckeypass $keypass -destkeypass $keypass -noprompt

Et générez le fichier pem qui ne contient que la clé

 echo making ${fileroot}.key.pem
 openssl pkcs12 -in $p12 -out ${fileroot}.key.pem  \
         -passin pass:$p12password  \
         -passout pass:$p12password  -nocerts
  • Créez un magasin de clés vide:
mkdir ~/nss
chmod 700 ~/nss
certutil -N -d ~/nss
  • Importez les clés dans le magasin de clés
pks12util -i <mykeys>.p12 -d ~/nss -W <password for cert >

Maintenant, la boucle devrait fonctionner.

curl --insecure --cert <client cert alias>:<password for cert> \
     --key ${fileroot}.key.pem  <URL>

Comme je l'ai mentionné, il peut y avoir d'autres façons de le faire, mais au moins c'était reproductible pour moi. Si curl est compilé avec le support NSS, je n'ai pas pu l'obtenir pour extraire le certificat client d'un fichier.

4
Carl Zmola

Outre la réponse précédente, assurez-vous que votre installation curl prend en charge https.
Vous pouvez utiliser curl --version pour obtenir des informations sur les protocoles pris en charge.

Si votre boucle prend en charge https, suivez la réponse précédente.

curl --cert certificate_path: mot de passe https://www.example.com

S'il ne prend pas en charge https, vous devez installer une version cURL qui prend en charge https.

3
vionixt