web-dev-qa-db-fra.com

connexion https en utilisant CURL à partir de la ligne de commande

Je suis nouveau dans le monde Curl et Cacerts et je suis confronté à un problème lors de la connexion à un serveur . En gros, je dois tester la connectivité via https d’une machine à une autre . de la machine A (une machine linux) J'ai essayé ceci sur la commande invite

cmd> curl https://[my domain or IP address]

et a obtenu ce qui suit:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

En parcourant quelques articles sur Internet, j'ai fait ceci:

openssl s_client -connect <domain name or Ip address>:443

et obtenu une réponse, y compris le certificat de serveur (dans -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----).

Que devrais-je faire ensuite d'ici? Je pense que je devrai simplement copier-coller le texte à l'intérieur de BEGIN CERTIFICATE & END CERTIFICATE et le sauvegarder dans un fichier . Mais, Quel type de fichier il devrait être? .pem, .crt? .. Que devrais-je faire ensuite?

J'ai essayé ceci - j'ai copié le texte à l'intérieur de BEGIN CERTIFICATE & END CERTIFICATE et je l'ai sauvegardé dans un fichier .crt - je l'ai nommé my-ca.crt (j'ai également essayé la même chose en le nommant fichier my-ca.pem).

cmd>curl --cacert my-ca.crt https://[my domain or IP address]

Mais j'ai la même erreur.

88
user1270392

J'ai eu le même problème - je cherchais une page de mon propre site, qui était diffusée via HTTPS, mais Curl donnait le même message "Problème de certificat SSL". J'ai résolu le problème en ajoutant un indicateur -k à l'appel afin d'autoriser les connexions non sécurisées.

curl -k https://whatever.com/script.php

Edit: j'ai découvert la racine du problème. J'utilisais un certificat SSL (de StartSSL, mais je ne pense pas que cela compte beaucoup) et je n'avais pas configuré le certificat intermédiaire correctement. Si vous rencontrez le même problème que l'utilisateur 1270392 ci-dessus, c'est probablement une bonne idée de tester votre certificat SSL et de résoudre tout problème avec celui-ci avant de recourir au correctif curl -k.

110
Dave Child

Solution simple

C'est mon script de tous les jours:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

Sortie:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to Host www.google.com left intact
26
Antonio Feitosa

Vous devez fournir l'intégralité de la chaîne de certificats à curl, car curl n'est plus livré avec aucun certificat d'autorité de certification. Puisque l'option cacert ne peut utiliser qu'un seul fichier, vous devez concattre toutes les informations de la chaîne dans un seul fichier.

Copiez la chaîne de certificats (de votre navigateur, par exemple) dans un fichier binaire codé DER x.509 (.cer). Faites ceci pour chaque cert. 

Convertissez les certificats en PEM et concattez-les en 1 fichier. 

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text

cat *.pem > certRepo

curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"

J'ai écrit un blog sur la procédure à suivre ici: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html

21
Somaiah Kumbera

utilisez --cacert pour spécifier un fichier .crt. ca-root-nss.crt par exemple. 

14
ano

J'ai eu ce genre de problème et je l'ai résolu en procédant comme suit:

  1. Obtenez le paquet de certificats d'autorité de certification racine à partir d'ici: https://curl.haxx.se/ca/cacert.pem et enregistrez-le au niveau local 

  2. Trouver le fichier php.ini

  3. Définissez le curl.cainfo sur le chemin des certificats. Donc ça va quelque chose comme: 

curl.cainfo = /path/of/the/keys/cacert.pem

5
geckob

avoir identifié le problème J'ai pu utiliser le fichier de CA par défaut du système existant, sous debian6, c’est:

/etc/ssl/certs/ca-certificates.crt

en tant que root, cela peut être fait comme:

echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini

puis redémarrez le serveur Web.

1
Jasen

Vous pouvez trouver ici les certificats de CA avec les instructions pour télécharger et convertir les certificats de CA de Mozilla . Une fois que vous avez obtenu ca-bundle.crt ou cacert.pem, vous utilisez simplement:

curl.exe --cacert cacert.pem https://www.google.com

ou 

curl.exe --cacert ca-bundle.crt https://www.google.com
1
lmiguelmh

Pour moi, je voulais juste tester un site web avec une redirection automatique http-> https. Je pense avoir déjà installé des certs, donc cela seul fonctionne pour moi sur Ubuntu 16.04 avec curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3

curl --proto-default https <target>

0
SamCyanide