Bonjour à tous, Je reviens vers vous pour un problème simple à priori mais qui ne fonctionne pas chez moi.
J'utilise Curl en php afin de tester mes propres api (OAuth ou autre). Concrètement, mon serveur utilise une requête curl pour interroger sa propre api.
Tout fonctionnait bien jusqu’à ce que je passe mes virtualhosts en SSL.
A présent, lorsque j’envoie une requête je reçois ce message d'erreur: CURL error : SSL certificate problem: unable to get local issuer certificate
J'ai donc suivi le guide d'installation de php : [www.php.net] 1. Téléchargement du fichier cacert.pem depuis [curl.se]. 2. Modification de la directive PHP : curl.cainfo="c:/wamp/bin/certificats/cacert.pem" 3. Relancer wampserver
Seulement, après avoir fait cela, j’obtient toujours la même erreur.
Pour informations, lorsque je travaille en ligne sur mes serveurs SSL tout fonctionne bien. Je veux dire par là que mon code php est correcte et que mes requêtes Curl le sont également.
Si quelqu'un avait une piste, je lui en serait très reconnaissant.
Cordialement, Fred
Ma config : Windows 10 (x64) | Wamp 3.3.6 (x64) | Apache 2.4.54.2 | Php 8.1.13 | Mysql 8.0.31 | PhpMyAdmin 5.2.0 | Netbeans IDE 18
> 2. Modification de la directive PHP : curl.cainfo="c:/wamp/bin/certificats/cacert.pem"
Dans quel fichier de la version PHP utilisée ? Si PHP est utilisé en tant que module Apache, il faut le faire dans le fichier phpForApache.ini Si PHP est utilisé en mode FCGI, il faut le faire dans le fichier php.ini
Il est utilisé en tant que module apache. J'ai modifié cette directive dans les deux fichiers mais rien y fait.
Par contre, j'ai remarqué que dans le menu "Wamp > Apache 2.4.54.2 > Modules Apache" le "ssl_module" est fiché d'une crois rouge, alors que dans mon "Wamp\bin\apache\apache2.4.54.2\conf\httpd.conf" la directive est bien décommentée et le module est bien chargé.
Ma config : Windows 10 (x64) | Wamp 3.3.6 (x64) | Apache 2.4.54.2 | Php 8.1.13 | Mysql 8.0.31 | PhpMyAdmin 5.2.0 | Netbeans IDE 18
Peut-être ai je mal généré mon certificat via la méthode" manuel" ?
Voici le résultat de mes tests : (je ne met qu'un seul slash après le protocole http(s) pour la lisibilité et la compréhension) ---------- Postulats ---------- HttpLocal = "http:/www.mon-site-local.home" HttpsLocal = "https:/www.mon-site-local.home" HttpsOnlLine = "https:/www.mon-site-online.fr" CurlError = "SSL certificate problem: unable to get local issuer certificate" CurlSuccess = "Aucune erreur"
---------- Tests avec le curl.cainfo non renseigné (phpForApache.ini) ---------- de HttpLocal vers HttpLocal => CurlSuccess de HttpLocal vers HttpsLocal => CurlError de HttpLocal vers HttpsOnlLine => CurlError
de HttpsLocal vers HttpLocal => CurlSuccess de HttpsLocal vers HttpsLocal => CurlError de HttpsLocal vers HttpsOnlLine => CurlError
---------- Tests avec le curl.cainfo renseigné (phpForApache.ini) ---------- de HttpLocal vers HttpLocal => CurlSuccess de HttpLocal vers HttpsLocal => CurlError de HttpLocal vers HttpsOnlLine => CurlSuccess
de HttpsLocal vers HttpLocal => CurlSuccess de HttpsLocal vers HttpsLocal => CurlError de HttpsLocal vers HttpsOnlLine => CurlSuccess
Il se peut également que cela vienne du fait que le certificat soit auto-signé, ce qui nous oblige a ajouter une exception au navigateur pour atteindre le site local https. J'ai donc ajouté la clé de mon-site-local.home-certonly.pem dans le fichier cacert.pem.
Et là j'obtiens l'erreur curl suivante : SSL: no alternative certificate subject name matches target host name 'www.mon-site-local.home'".
Je pense me rapprocher de la solution. Mon certificat est défini pour le nom de domaine "mon-site-local.home" et non "www.mon-site-local.home". Donc lorsque ma requête curl interroge "https:/mon-site-local.home" tout fonctionne. Par contre, c'est un échec lorsque j'interroge "https:/www.mon-site-local.home".
J'ai donc essayé d'ajouter un ServerAlias dans le httpd-ssl.conf mais cela ne fonctionne pas. Je tiens à signaler que ce ServerAlias est également définie dans le VirtualHost du port 80.
Y a t-il un moyen pour définir un ServerAlias fonctionnel dans mon VirtualHost SSL?
Cordialement,
Ma config : Windows 10 (x64) | Wamp 3.3.6 (x64) | Apache 2.4.54.2 | Php 8.1.13 | Mysql 8.0.31 | PhpMyAdmin 5.2.0 | Netbeans IDE 18
Dans le génération du certificat Self Signed, onglet Cerificate Domain Name, en plus de Certificate Domain Name, dans la colonne Certificate SAN (Subject Alternate Names) vous pouvez mettre autant de Domain Name que vous voulez, par exemple le même site mais avec www.
Les certificats auto-signés obligent à mettre une exception dans les navigateurs. C'est expliqué dans Clic-Droit -> Aide -> Aide mode HTTPS Wampserver 'automatique'
Bonjour, Merci beaucoup pour votre aide, tout fonctionne parfaitement à présent.
Je récapitule donc : 1. Générer un certificat contenant tous les domaines et alias de domaine. (Voir Aide Wamp) 2. Modifier éventuellement le VirtualHost dans "httpd-ssl.conf". (Ajouter un ServerAlias par ex.) 3. Télécharger le fichier "cacert.pem" (via [curl.se]) contenant les autorités officielles. 4. Coller le fichier "cacert.pem" dans l'endroit de son choix. (Pour moi : "c:/wamp/bin/certificats/cacert.pem" 5. Copier la clé de notre certificat "mon-site-local.home-certonly.pem" dans le fichier "cacert.pem". 6. Décommenter et modifier la directive "curl.cainfo" dans les fichier "php.ini" et "phpForApache.ini". (Dans mon cas : curl.cainfo="c:/wamp/bin/certificats/cacert.pem" 7. Redémarrer les services.
J'aurais peut-être juste une dernière question pour un éventuel cas futur. Quel serait l'intérêt ou l'utilité de mettre notre certificat dans le magasin de certificat windows?
En tout cas, encore merci Otomatic, d'avoir pris le temps de m'aider.
Reposez vous bien.
Cordialement, Fred
Ma config : Windows 10 (x64) | Wamp 3.3.6 (x64) | Apache 2.4.54.2 | Php 8.1.13 | Mysql 8.0.31 | PhpMyAdmin 5.2.0 | Netbeans IDE 18