Curl https ignore l'authentification SSL en PHP et signale une erreur

小云云
Libérer: 2023-03-20 15:48:01
original
10256 Les gens l'ont consulté

Cet article partage principalement avec vous l'analyse et les solutions au problème de rapport d'erreurs de Curl https ignorant l'authentification SSL en PHP. J'espère qu'il pourra aider tout le monde.

function get($url = '', $cookie = ''){
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
  curl_setopt($ch, CURLOPT_SSLVERSION, 2);//设置SSL协议版本号
  if($cookie){
      curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
      curl_setopt ($ch, CURLOPT_REFERER,'https://wx.qq.com');
    }
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  $output = curl_exec($ch);  if ( curl_errno($ch) )    return curl_error($ch);
  curl_close($ch);  return $output;
}
Copier après la connexion
Copier après la connexion

La méthode ci-dessus est la fonction permettant à l'utilisateur curl de lancer une requête https. L'élément CURLOPT_SSLVERSION spécifie la version du protocole SSL. De nombreux codes sur Internet indiquent qu'il peut être défini sur 1/2/3. mais les résultats de mon test sont les suivants :

  1. Lorsqu'il est défini sur 1, l'erreur suivante sera signalée dans la version PHP 5.2.11 :
    « error:14077458:SSL routines :SSL23_GET_SERVER_HELLO:reason(1112)”
    Ceci La raison pour laquelle l'erreur est signalée est que la version d'openssl dans votre php est trop basse. La solution est de mettre à niveau votre php vers 5.3.60 (je n'ai pas testé quelle version. est supérieur, cela devrait aller tant que la version openssl est supérieure à 0.9.8)

  2. Lorsqu'elle est définie sur 2, l'erreur suivante sera signalée :
    Erreur d'environnement Linux : "La plage de versions SSL n'est pas valide."
    Erreur d'environnement Windows : "OpenSSL a été construit sans support SSLv2"
    Cela devrait être plus facile à comprendre car le numéro de version du protocole SSL n'est pas valide

  3. Lorsqu'il est défini sur 3, l'erreur suivante sera signalée :
    Erreur d'environnement Linux : "Fin de fichier rencontrée".
    Erreur d'environnement Windows : "Erreur de protocole SSL inconnue lors de la connexion à login.wx". .qq.com:443"
    Après avoir vérifié les informations en ligne, je pense que la raison de cette erreur est due à des vulnérabilités de sécurité dans SSLV2 et SSLV3. WeChat n'utilise plus les versions de protocole SSLV2 et SSLV3, donc une erreur se produira lorsque nous réglez-le sur 3.

function get($url = '', $cookie = ''){
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
  curl_setopt($ch, CURLOPT_SSLVERSION, 2);//设置SSL协议版本号
  if($cookie){
      curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
      curl_setopt ($ch, CURLOPT_REFERER,'https://wx.qq.com');
    }
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  $output = curl_exec($ch);  if ( curl_errno($ch) )    return curl_error($ch);
  curl_close($ch);  return $output;
}
Copier après la connexion
Copier après la connexion

La méthode ci-dessus est la fonction permettant à l'utilisateur curl de lancer une requête https. L'élément CURLOPT_SSLVERSION spécifie la version du protocole SSL. De nombreux codes sur Internet indiquent qu'il peut être défini sur. 1/2/3, mais Les résultats de mon test sont les suivants :

  1. Lorsqu'il est défini sur 1, l'erreur suivante sera signalée dans la version PHP 5.2.11 :
    « error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112 " version is fine)

  2. Lorsqu'elle est définie sur 2, l'erreur suivante sera signalée :

    Erreur d'environnement Linux : "SSL la plage de versions n'est pas valide.
    Lorsqu'il est défini sur 3, l'erreur suivante sera signalée :
    Erreur d'environnement Linux :"Fin de fichier rencontrée".
    Erreur signalée dans l'environnement Windows : "Erreur de protocole SSL inconnue lors de la connexion à login.wx. qq.com:443"

    Après avoir vérifié les informations en ligne, je pense que la raison de cette erreur est due à SSLV2. Il y a des failles de sécurité dans SSLV3, donc WeChat n'utilise plus les versions de protocole SSLV2 et SSLV3, donc une erreur se produira lorsque nous l'avons mis à 3.

  3. Recommandations associées :

  4. Configuration de l'authentification SSL pour PHP dans l'environnement Nginx (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