J'essaie d'exécuter la commande CURL suivante mais j'obtiens une erreur de certificat SSL:
curl https://example.com:8443/cli/agentCLI -u username:password
Erreur:
curl: (60) Problème de certificat SSL, vérifiez que le certificat CA est OK. Détails: erreur: 14090086: routines SSL: SSL3_GET_SERVER_CERTIFICATE: échec de la vérification du certificat Plus de détails ici: http://curl.haxx.se/docs/sslcerts.html
curl effectue la vérification du certificat SSL par défaut, à l'aide d'un "ensemble" de clés publiques (CA) de l'autorité de certification (CA). Le bundle par défaut est nommé curl-ca-bundle.crt; vous pouvez spécifier un autre fichier à l'aide de l'option --cacert. Si ce serveur HTTPS utilise un certificat signé par une autorité de certification représentée dans le bundle, la vérification du certificat a probablement échoué en raison d'un problème avec le certificat (il peut être expiré ou le nom peut ne pas correspondre au nom de domaine dans l'URL). Si vous souhaitez désactiver la vérification curl du certificat, utilisez l'option -k (ou --insecure).
Comment pourrais-je résoudre ce problème pour autoriser les URL SSL?
si vous utilisez un certificat auto-signé sur le serveur, vous pouvez utiliser:
curl -k https://example.com:8443/cli/agentCLI -u username:password
mais sachez que ce n'est pas mieux que d'utiliser une connexion non SSL au serveur, car votre communication ne sera plus sécurisée, permettant toutes sortes d'attaques d'homme au milieu.
Bien que mon conseil soit de télécharger le .pem
depuis le serveur:
/etc/ssl/
si vous avez accès au serveur ,en utilisant:
echo "HEAD / HTTP/1.0\n Host: example.com\n\n EOT\n" | openssl s_client -prexit -connect example.com:8443 > cert.pem
sur votre ordinateur, ne conservez que la partie entre BEGIN CERTIFICATE
et END CERTIFICATE
dans le fichier (y compris les lignes BEGIN/END) et donnez-lui le paramètre --cacert
option, vous pouvez également le télécharger. Vous pourrez ensuite authentifier votre serveur à chaque connexion!
curl --cacert cert.pem https://example.com:8443/cli/agentCLI -u username:password
Tester sur mon propre serveur auto-signé, ça marche bien:
% openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----' > cert.pem
% curl --cacert cert.pem https://example.com
pour un exemple qui devrait fonctionner:
% openssl s_client -showcerts -connect git.cryptolib.org:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----' > cert.pem
% curl --cacert cert.pem https://git.cryptolib.org
curl: (51) SSL: certificate verification failed (result: 5)
mais malheureusement ce n'est pas le cas.
J'ai également essayé de le faire, comme suggéré ici :
% openssl x509 -inform PEM -in cert.pem -text -out certdata.pem
% curl --cacert certdata.pem https://git.cryptolib.org
Ce qui ne fonctionne pas, car ce site (git.cryptolib.org) que j'utilise pour les tests n'est pas auto-signé, mais il provient de la chaîne CACert, qui peut être résolu en utilisant les certificats racine CACert, à la suite de cela FAQ .
quelques ressources à creuser:
Mais aucune réponse définitive à ce jour: -s