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; }
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 :
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)
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
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; }
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 :
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)
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"
Recommandations associées :
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!