国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
Pourquoi cela échoue
Utiliser les autorités de certification natives
Téléchargez et conservez un fichier cacert.pem
Maison développement back-end tutoriel php Comment résoudre les problèmes d'autorité de certification PHP Curl HTTPS sous Windows

Comment résoudre les problèmes d'autorité de certification PHP Curl HTTPS sous Windows

Nov 11, 2024 pm 12:24 PM
php

Une requête HTTPS réussie implique que le client HTTP valide le Certificat TLS fourni par le serveur par rapport à une liste de racines connues et fiables certificats. L'extension PHP Curl n'est pas différente?; la boucle L'extension utilise libcurl pour effectuer la requête HTTPS, et libcurl, qui à son tour utilise une bibliothèque TLS telle qu'OpenSSL pour valider la requête.

Comment résoudre les problèmes dautorité de certification PHP Curl HTTPS sous Windows

L'extension Curl nécessite un fichier valide contenant tout le certificats racines de confiance pour terminer la validation HTTPS et PHP expose cela sous forme de directive dans le fichier php.ini.

Sous Linux, BSD et macOS, libcurl peut utiliser par défaut la racine du système certificats, mais cela n'est pas possible sous Windows car Windows ne ne vient pas avec un seul fichier contenant toute la racine du système certificats.

Cet article traite de deux approches possibles pour réussir à effectuer des requêtes HTTPS avec l'extension Curl, et de ce qu'il ne faut pas faire qui peut laisser les requêtes HTTPS non sécurisées.

Pourquoi cela échoue

$ch?=?curl_init('https://php.watch');??
curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?true);??
curl_exec($ch);?//?false??

curl_error($ch);
//?SSL?certificate?problem:?unable?to?get?local?issuer?certificate

Si les appels curl_exec échouent avec une fausse réponse, et si curl_error indique un problème de certificat SSL?: impossible d'obtenir une erreur de certificat de l'émetteur local, cela signifie que Curl n'a pas re?u de fichier contenant les certificats racine, ou n'a pas pu le découvrir.

Cette erreur est rare sur les systèmes Linux, BSD et macOS, mais assez courant sous Windows car il n'y a pas de fichier désigné pour obtenir la racine certificats, et PHP ne fournit pas de liste de certificats racine sur son propre.

La solution est de fournir un fichier contenant le root à jour certificats, ou idéalement, laissez Curl analyser le magasin racine natif que le système d'exploitation sous-jacent fournit.

Utiliser les autorités de certification natives

Sur Curl 7.71 et versions ultérieures, il est possible de définir un Curl option pour demander à Curl d'utiliser les certificats racine natifs (système). Cela fonctionne même sous Windows, où Curl analyse les certificats racine du système et les utilise.

Lorsque l'option CURLOPT_SSL_OPTIONS est définie sur CURLSSLOPT_NATIVE_CA ou un masque de bits contenant ces bits, Curl tente d'utiliser le natif magasin de certificats racine, sous réserve des capacités et des versions du bibliothèque TLS sous-jacente.

Il s'agit du correctif recommandé, si l'extension Curl est construite avec Curl 7.71 ou version ultérieure et PHP 8.2 et version ultérieure.

?$ch?=?curl_init('https://php.watch');
??curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?true);
???curl_setopt($ch,?CURLOPT_SSL_OPTIONS,?CURLSSLOPT_NATIVE_CA);
????curl_exec($ch);

Notez que l'extrait ci-dessus ne vérifie pas la La version Curl et le PHP version, et suppose que les exigences des versions PHP et Curl sont remplies. Le Voici un exemple montrant l'ajout conditionnel de l'option Curl?:

$ch?=?curl_init('https://php.watch');??
curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?true);??
if?(defined('CURLSSLOPT_NATIVE_CA')??
??&&?version_compare(curl_version()['version'],?'7.71',?'>='))?{??
????curl_setopt($ch,?CURLOPT_SSL_OPTIONS,?CURLSSLOPT_NATIVE_CA);
}??
curl_exec($ch);

Téléchargez et conservez un fichier cacert.pem

Pour les applications exécutées sur des versions PHP antérieures à 8.2 (où CURLSSLOPT_NATIVE_CA constante n'est pas disponible), ou lorsque la version de Curl est antérieure à 7.71, la solution alternative recommandée est de télécharger un fichier compatible Curl fichier de certificat racine et configurez PHP ou la requête Curl pour l'utiliser.

Le projet Curl tient à jour une liste de certificats. Voir Certificats CA extraits de Mozilla.

  1. Téléchargez le fichier cacert.pem

  2. Déplacez le fichier vers un répertoire accessible par PHP et le serveur web. Par exemple, vers C:/php/cacert.pem.
  3. Modifiez le fichier php.ini et modifiez l'entrée curl.cainfo pour pointer vers le chemin absolu vers le fichier cacert.pem.

  4. $ch?=?curl_init('https://php.watch');??
    curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?true);??
    curl_exec($ch);?//?false??
    
    curl_error($ch);
    //?SSL?certificate?problem:?unable?to?get?local?issuer?certificate
  5. Facultativement, redémarrez le serveur Web (tel qu'Apache) pour recharger l'INI fichier.

L'inconvénient de cette approche est que le fichier cacert.pem doit être mis à jour régulièrement. Le cacert.pem Le fichier fourni par le projet Curl, par exemple, est extrait de la racine magasin maintenu par Mozilla. En moyenne, cette liste et le fichier obtiennent mis à jour 4 à 5 fois par an. Pour garantir la compatibilité avec la dernière version root liste des certificats, assurez-vous de mettre à jour la copie locale de ce fichier régulièrement

S'il n'est pas possible de modifier le fichier INI, précisez également le chemin absolu du fichier cacert.pem dans une requête Curl?:

?$ch?=?curl_init('https://php.watch');
??curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?true);
???curl_setopt($ch,?CURLOPT_SSL_OPTIONS,?CURLSSLOPT_NATIVE_CA);
????curl_exec($ch);

Sur PHP 8.2 ?avec Curl 7.77 , il est possible d'obtenir une cha?ne contenant le contenu de cacert.pem avec l'option CURLOPT_CAINFO_BLOB.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment obtenir l'ID de session en cours dans PHP? Comment obtenir l'ID de session en cours dans PHP? Jul 13, 2025 am 03:02 AM

La méthode pour obtenir l'ID de session en cours dans PHP est d'utiliser la fonction session_id (), mais vous devez appeler session_start () pour l'obtenir avec succès. 1. Appelez session_start () pour démarrer la session; 2. Utilisez session_id () pour lire l'ID de session et sortir une cha?ne similaire à ABC123DEF456GHI789; 3. Si le retour est vide, vérifiez si session_start () est manquant, si l'utilisateur accède pour la première fois, ou si la session est détruite; 4. L'ID de session peut être utilisé pour l'exploitation forestière, la vérification de la sécurité et la communication croisée, mais la sécurité doit être prêtée attention. Assurez-vous que la session est correctement activée et que l'ID peut être obtenu avec succès.

Php obtient une sous-cha?ne à partir d'une cha?ne Php obtient une sous-cha?ne à partir d'une cha?ne Jul 13, 2025 am 02:59 AM

Pour extraire les sous-cha?nes de cha?nes PHP, vous pouvez utiliser la fonction substr (), qui est Syntax substr (String $ string, int $ start ,? int $ longueur = null), et si la longueur n'est pas spécifiée, elle sera interceptée à la fin; Lors du traitement des caractères multi-octets tels que le chinois, vous devez utiliser la fonction mb_substr () pour éviter le code brouillé; Si vous avez besoin d'intercepter la cha?ne en fonction d'un séparateur spécifique, vous pouvez utiliser exploit () ou combiner strpos () et substr () pour l'implémenter, tels que l'extraction d'extensions de nom de fichier ou de noms de domaine.

Comment effectuez-vous des tests unitaires pour le code PHP? Comment effectuez-vous des tests unitaires pour le code PHP? Jul 13, 2025 am 02:54 AM

UnittestingInphpinvolvesverifierifySindividualCodeUnits like outweethodstocatchbugSearlyAndensureReliveLerefactoring.1) setupphpunitviacomposer, createAtestDirectory, andconfigureAutoloadandphpunit.xml.2)

Comment diviser une cha?ne en un tableau en php Comment diviser une cha?ne en un tableau en php Jul 13, 2025 am 02:59 AM

Dans PHP, la méthode la plus courante consiste à diviser la cha?ne en un tableau à l'aide de la fonction Exploit (). Cette fonction divise la cha?ne en plusieurs parties via le délimiteur spécifié et renvoie un tableau. La syntaxe est Exploit (séparateur, cha?ne, limite), où le séparateur est le séparateur, la cha?ne est la cha?ne d'origine et la limite est un paramètre facultatif pour contr?ler le nombre maximum de segments. Par exemple $ str = "pomme, banane, orange"; $ arr = explosage (",", $ str); Le résultat est ["Apple", "Bana

Types de données JavaScript: référence primitive vs Types de données JavaScript: référence primitive vs Jul 13, 2025 am 02:43 AM

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

Utilisation de STD :: Chrono en C Utilisation de STD :: Chrono en C Jul 15, 2025 am 01:30 AM

STD :: Chrono est utilisé en C pour traiter le temps, y compris l'obtention de l'heure actuelle, la mesure du temps d'exécution, le point de fonctionnement et la durée de l'opération et le temps d'analyse de formatage. 1. Utilisez STD :: Chrono :: System_clock :: Now () pour obtenir l'heure actuelle, qui peut être convertie en une cha?ne lisible, mais l'horloge système peut ne pas être monotone; 2. Utilisez STD :: Chrono :: standard_clock pour mesurer le temps d'exécution pour assurer la monotonie, et la convertir en millisecondes, secondes et autres unités via durée_cast; 3. Point de temps (temps_point) et durée (durée) peut être interopérable, mais l'attention doit être accordée à la compatibilité des unités et à l'époque de l'horloge (époque)

Comment PHP gère-t-il les variables d'environnement? Comment PHP gère-t-il les variables d'environnement? Jul 14, 2025 am 03:01 AM

TOACCESSENSIRONDAMENTVARIBLESSInPHP, useGettenv () Orthe $ _ENVSUPERGLOBAL.1.getenv ('var_name') RetrievesAsaspecificVariable.2. $ _ En V ['var_name'] AccesssaSVariblesifVariables_OrderInphp.iniIncluses "E" .setVariblesVICLIWithVar = ValuePpript.Php, INAPACH

Qu'est-ce que la liaison statique tardive en PHP? Qu'est-ce que la liaison statique tardive en PHP? Jul 13, 2025 am 02:36 AM

DERNERATIATBINDINGInPHPALLOWSSTATICAL :: TOREFERTOTHECLASSINITIELSALLEDATRUTIMEInInHeritancesCenarios.Beforephp5.3, Self :: Toujours référencer lesclasse

See all articles