11 votes

Ajout d'un certificat SSL auto-signé pour libcurl

Je suis en train d'utiliser libcurl dans mon application C pour communiquer avec un serveur HTTPS que j'ai mis en place. J'ai généré un certificat auto-signé sur ce serveur que je souhaite utiliser avec curl.

Je sais que je peux définir CURLOPT_SSL_VERIFYPEER à 0 pour contourner la vérification SSL, mais je souhaite ajouter le certificat généré aux certificats CA "valides" de curl.

J'ai essayé de définir CURLOPT_CAPATH et CURLOPT_SSLCERT à l'emplacement de la clé publique SSL du serveur, mais la vérification échoue.

Comment puis-je ajouter mon propre certificat CA/auto-signé pour que libcurl le valide avec succès?

4voto

Tuzo Points 14234

Pour ajouter un certificat auto-signé, utilisez CURLOPT_CAINFO

Pour récupérer le certificat public SSL d'un site, utilisez

openssl s_client -connect www.site.com:443 | tee logfile

Le certificat est la portion marquée par ----BEGIN CERTIFICATE---- et
---END CERTIFICATE----.

Enregistrez ce certificat dans un fichier, et utilisez curl de la manière suivante :

CURL* c = curl_easy_init();
curl_easy_setopt(c, CURLOPT_URL, "https://www.site.com");
curl_easy_setopt(c, CURLOPT_CAINFO, "/chemin/vers/le/certificat.crt");
curl_easy_setopt(c, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_perform(c);
curl_easy_cleanup(c);

0voto

Tout d'abord, vous mélangez un peu les fichiers "Autorité de certification" et les fichiers "Certificat", ce qui me perturbe.

Comment puis-je ajouter mon propre certificat CA/auto-signé afin que libcurl puisse le valider avec succès?

Cela pourrait être vu comme une réponse complémentaire à celle ci-dessus. Dans le cas où vous souhaitez ajouter un CA auto-signé (chaque CA racine est auto-signé) afin que libcurl puisse valider avec succès le certificat d'un site web, qui a été généré par le CA, alors continuez à lire.

Avec CURLOPT_CAINFO, vous devez passer le fichier "Autorité de certification" (CA) qui a été utilisé lors de la génération du certificat (non-CA) du site que vous souhaitez vérifier.

(Je ne sais pas si cette option fonctionne en lui passant un certificat non-CA, la documentation n'est pas vraiment claire à ce sujet, et la réponse précédente a 2 votes positifs, donc si quelqu'un l'a testée, veuillez commenter)

Vous pouvez également passer un fichier de chaîne d'Autorité de certification qui contient le CA qui a été utilisé, au cas où ce ne serait pas un CA racine.

Voici un petit tutoriel que j'ai trouvé qui peut vous aider à tester votre solution:

Création d'un CA racine privé: http://www.flatmtn.com/article/setting-openssl-create-certificates

Création d'un certificat de site: http://www.flatmtn.com/article/setting-ssl-certificates-apache

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X