Je suis nouveau dans le monde de Curl et Cacerts et je suis confronté à un problème lors de la connexion à un serveur. Fondamentalement, je dois tester la connectivité sur https d'une machine à une autre machine. J'ai une URL à laquelle je dois me connecter à partir de la machine A (une machine Linux) J'ai essayé ceci sur l'invite de commande
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 j'ai obtenu une réponse, y compris le certificat du serveur (à l'intérieur -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
).
Que dois-je faire ensuite à partir d'ici. Je pense que je devrai simplement copier coller le texte à l'intérieur
BEGIN CERTIFICATE & END CERTIFICATE
et l'enregistrer dans un fichier. Mais, quel type de fichier cela devrait-il être? .pem
, .crt
? .. Que dois-je faire après ça?
J'ai essayé ceci - j'ai copié le texte à l'intérieur BEGIN CERTIFICATE & END CERTIFICATE
et l' ai enregistré dans un .crt
fichier - je l'ai nommé my-ca.crt
( j'ai également essayé la même chose en le nommant comme my-ca.pem
fichier), puis j'ai fait ceci:
cmd>curl --cacert my-ca.crt https://[my domain or IP address]
Mais j'ai eu la même erreur.
la source
--insecure
pour ignorer l'erreur SSL.Réponses:
J'ai eu le même problème - je cherchais une page de mon propre site, qui était servie via HTTPS, mais curl donnait le même message "problème de certificat SSL". J'ai contourné ce problème en ajoutant un
-k
indicateur à l'appel pour permettre les connexions non sécurisées.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é correctement le certificat intermédiaire. Si vous rencontrez le même problème que user1270392 ci-dessus, c'est probablement une bonne idée de tester votre certificat SSL et de résoudre les problèmes éventuels avant de recourir au
curl -k
correctif.la source
Solution simple
C'est mon script quotidien:
Production:
la source
--insecure
connexion via TSL, tous les jours ...Vous devez fournir toute la chaîne de certificats à curl, car curl n'est plus livré avec les certificats CA. Étant donné que l'option cacert ne peut utiliser qu'un seul fichier, vous devez concater les informations complètes de la chaîne en 1 fichier
Copiez la chaîne de certificats (à partir de votre navigateur, par exemple) dans le binaire codé DER x.509 (.cer). Faites ceci pour chaque cert.
Convertissez les certificats en PEM et concattez-les en 1 fichier.
J'ai écrit un blog sur la façon de procéder ici: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
la source
utilisez
--cacert
pour spécifier un.crt
fichier.ca-root-nss.crt
par exemple.la source
J'ai en fait eu ce genre de problème et je le résous par ces étapes:
Obtenez le paquet de certificats CA racine à partir d'ici: https://curl.haxx.se/ca/cacert.pem et enregistrez-le sur local
Trouvez le
php.ini
fichierDéfinissez le
curl.cainfo
comme étant le chemin des certificats. Donc, ce sera quelque chose comme:curl.cainfo = /path/of/the/keys/cacert.pem
la source
Vous trouverez ici les certificats CA avec des instructions pour télécharger et convertir les certificats CA Mozilla . Une fois que vous obtenez
ca-bundle.crt
ou quecacert.pem
vous utilisez simplement:ou
la source
après avoir résolu le problème, j'ai pu utiliser le fichier CA par défaut du système existant, sur debian6 c'est:
en tant que root, cela peut être fait comme:
puis redémarrez le serveur Web.
la source
tu pourrais utiliser ça
curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);
la source
Pour moi, je voulais juste tester un site Web qui avait une redirection automatique http-> https. Je pense que j'ai déjà installé des certificats, donc cela seul fonctionne 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 <target>
la source
Avec les versions modernes de curl, vous pouvez simplement remplacer l'adresse IP à laquelle vous connecter, en utilisant --resolve ou --connect-to (curl plus récent que la version 7.49). Cela fonctionne même avec SSL / SNI. Tous les détails se trouvent dans la page de manuel.
Par exemple, pour remplacer DNS et vous connecter à www.example.com avec SSL en utilisant une adresse IP particulière: (Cela remplacera également ipv6)
Un autre exemple, pour se connecter à un serveur principal particulier nommé backend1 sur le port 8080
N'oubliez pas d'ajouter l'en-tête d'hôte si le serveur en a besoin pour répondre correctement:
la source