Connexion https utilisant CURL à partir de la ligne de commande

Je suis nouveau sur Curl et Cacerts World et je suis confronté à un problème lors de la connexion à un serveur. Fondamentalement, je dois tester la connectivité via https d’une machine à une autre. J’ai une URL à laquelle je dois me connecter depuis la machine A (une machine Linux). J’ai essayé ceci à l’invite de commande.

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

et obtenu ce qui suit:

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

En parcourant quelques articles sur internet, j’ai fait ceci:

 openssl s_client -connect :443 

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

Que dois-je faire à partir d’ici? Je pense que je devrai simplement copier coller le texte dans BEGIN CERTIFICATE & END CERTIFICATE et le sauvegarder dans un fichier. Mais, quel type de fichier devrait-il être? .pem , .crt ? .. Que devrais-je faire après ça?

J’ai essayé ceci – copié le texte à l’intérieur de BEGIN CERTIFICATE & END CERTIFICATE et l’ .crt enregistré dans un fichier .crt – l’a nommé my-ca.crt (a également essayé la même chose en le nommant comme fichier my-ca.pem ) et a ensuite fait ce:

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

Mais eu la même erreur.

J’ai eu le même problème – je cherchais une page de mon propre site, qui était servi via HTTPS, mais curl donnait le même message “problème de certificate SSL”. Je l’ai contourné en ajoutant un indicateur -k à l’appel pour 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 certificate SSL (à partir de StartSSL, mais je ne pense pas que cela compte beaucoup) et je n’ai pas correctement configuré le certificate intermédiaire. Si vous rencontrez le même problème que user1270392 ci-dessus, c’est probablement une bonne idée de tester votre certificate SSL et de résoudre tout problème avant de recourir au correctif curl -k .

C’est mon script quotidien:

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

Ouput:

 * Server certificatee: * 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 certificatee verify ok. * Server GFE/2.0 is not blacklisted * Connection #0 to host www.google.com left intact 

Vous devez fournir l’intégralité de la chaîne de certificates à curl, car curl n’est plus livré avec les certificates CA. Puisque l’option cacert ne peut utiliser qu’un seul fichier, vous devez concaténer l’intégralité de la chaîne en 1 fichier.

Copiez la chaîne de certificates (à partir de votre navigateur, par exemple) dans le binary codé DER x.509 (.cer). Faites ceci pour chaque cert.

Convertissez les certs en PEM, et mettez-les dans un 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 façon de le faire ici: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html

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

Je ne suis pas sûr de la solution que vous proposez, mais je cherchais simplement des informations similaires et j’ai trouvé ce site utile pour utiliser curl avec PHP

http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

J’ai effectivement eu ce genre de problème et je le résous par ces étapes:

  1. Obtenez le paquet de certificates de l’autorité de certificateion racine à partir d’ici: https://curl.haxx.se/ca/cacert.pem et enregistrez-le sur votre ordinateur local.

  2. Trouvez le fichier php.ini

  3. Définissez le curl.cainfo comme chemin des certificates. Donc, il y aura quelque chose comme:

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

vous pourriez l’utiliser

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);

ayant digne le problème, j’ai pu utiliser le fichier CA par défaut du système existant, sur debian6 c’est:

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

en tant que root cela peut être fait comme:

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

puis redémarrez le serveur Web.

Ici, vous pouvez trouver les certificates CA avec des instructions pour télécharger et convertir les certificates CA Mozilla . Une fois que vous obtenez 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 

Pour moi, je voulais juste tester un site Web avec une redirection automatique http-> https. Je pense que j’avais déjà installé des certificates, donc ça marche pour moi sur Ubuntu 16.04 en cours d’exécution 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