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:
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.
Trouvez le fichier php.ini
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