Maison > développement back-end > tutoriel php > Accédez à HTTPS en utilisant CURL en PHP

Accédez à HTTPS en utilisant CURL en PHP

小云云
Libérer: 2023-03-22 19:48:02
original
6250 Les gens l'ont consulté

Cet article partage principalement avec vous comment utiliser CURL en PHP pour accéder à HTTPS. Il partage principalement avec vous la méthode de code. J'espère qu'il pourra aider tout le monde.

Pour faciliter l'explication, commençons par le code~ Il s'agit d'une fonction reconditionnée aujourd'hui

/**
 * curl POST
 *
 * @param	string  url
 * @param	array   数据
 * @param	int     请求超时时间
 * @param	bool    HTTPS时是否进行严格认证
 * @return	string
 */
function curlPost($url, $data = array(), $timeout = 30, $CA = true){  

    $cacert = getcwd() . '/cacert.pem'; //CA根证书
    $SSL = substr($url, 0, 8) == "https://" ? true : false;
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);
    if ($SSL && $CA) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
    } else if ($SSL && !$CA) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); //避免data数据过长问题
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    //curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode

    $ret = curl_exec($ch);
    //var_dump(curl_error($ch));  //查看报错信息

    curl_close($ch);
    return $ret;  
}
Copier après la connexion

Si l'adresse URL commence par https, utilisez SSL, sinon utilisez le protocole HTTP ordinaire .

Est-il sécuritaire d'utiliser HTTPS ? En fait, SSL comporte également différents niveaux de vérification.

Par exemple, dois-je vérifier le nom commun dans le certificat ? (BTW : Common Name signifie généralement renseigner le nom de domaine (domaine) ou le sous-domaine (sous-domaine) pour lequel vous allez demander un certificat SSL.)

Devez-vous vérifier le nom d'hôte ?

Faites-vous confiance à un certificat ou uniquement à ceux émis par l'autorité de certification ?

(Je l'ai essuyé, la batterie est presque morte, je n'ai mentionné que les points clés - -|||)

Si le certificat SSL du site Web est acheté auprès d'une autorité de certification (généralement plus cher) , vous pouvez alors utiliser une authentification plus stricte lors de l'accès, c'est-à-dire :

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);   // 只信任CA颁布的证书
        curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根证书(用来验证的网站证书是否是CA颁布)
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名,并且是否与提供的主机名匹配
Copier après la connexion


Si le certificat du site Web est généré par vous-même ou demandé par une petite organisation en ligne, alors si vous utilisez une authentification stricte lorsque y accéder ne passera pas et retournera false directement. (D'ailleurs, lorsque false est renvoyé, vous pouvez imprimer curl_error($ch) pour afficher le message d'erreur spécifique.) À ce stade, vous pouvez réduire le niveau de vérification en fonction de la situation pour garantir un accès normal, par exemple :

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 检查证书中是否设置域名(为0也可以,就是连域名存在与否都不验证了)
Copier après la connexion

Habituellement, nous utilisons un navigateur. Lorsque vous visitez divers sites Web https, vous rencontrerez parfois un message indiquant que le certificat n'est pas fiable. En fait, cela est dû au fait que les certificats de ces sites Web ne sont pas émis par des organisations formelles d'autorité de certification.

Divers navigateurs sur le marché intègrent des informations sur la liste des certificats racines de l'autorité de certification. Lors de la visite de sites Web avec des certificats émis par une autorité de certification, les certificats de ces sites Web seront vérifiés en fonction du certificat racine, cette invite n'apparaîtra donc pas. .

Concernant le fichier de certificat racine de l'AC, il contient en fait les certificats de clé publique de chaque grande organisation de l'AC, qui est utilisé pour vérifier si le certificat du site Web est émis par ces organisations.

Le fichier ici est dérivé de l'arborescence des sources de Mozilla et converti en fichier de certificat au format PEM. (Vous pouvez télécharger le fichier prêt à l'emploi ici http://curl.haxx.se/ca/cacert.pem)

Enfin, parlons de quelque chose qui n'a rien à voir avec SSL :

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
Copier après la connexion

Recommandations associées :

php utilise curl pour accéder à l'exemple de code https

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal