이 기사는 주로 Curl https가 PHP에서 SSL 인증을 건너뛰는 오류 보고 문제에 대한 분석 및 솔루션을 공유합니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.
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; }
위 메소드는 사용자 컬이 https 요청을 시작하는 함수입니다. CURLOPT_SSLVERSION 항목은 SSL 프로토콜 버전을 지정합니다. 인터넷의 많은 코드에서는 1/2/3으로 설정할 수 있다고 하지만 내 테스트 결과는 다음과 같습니다.
1시로 설정하면 PHP 5.2.11 버전에서 다음 오류가 보고됩니다.
"error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)"
여기에 보고된 오류는 귀하의 PHP에 있는 openssl 버전이 너무 낮다는 것입니다. 해결책은 귀하의 PHP가 5.3.60에 도달하도록 업그레이드하는 것입니다(어떤 버전이 더 높은지는 테스트하지 않았으나 openssl 버전이 다음보다 높으면 괜찮습니다). 0.9.8)
2로 설정하면 다음 오류가 보고됩니다.
Linux 환경 오류: " SSL 버전 범위가 유효하지 않습니다."
Windows 환경에서는 "OpenSSL이 없이 빌드되었습니다." SSLv2 지원"
이것은 이해하기 더 쉽습니다. 즉, SSL 프로토콜의 버전 번호가 유효하지 않습니다. 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; }
1로 설정하면 PHP 5.2.11 버전에서 다음 오류가 보고됩니다.
"error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)"
2로 설정하면 다음 오류가 보고됩니다:
Windows 환경에서 보고된 오류: "login.wx.qq.com:443 연결 시 알 수 없는 SSL 프로토콜 오류"
이 오류의 원인은 온라인으로 정보를 확인한 결과 SSLV2 때문인 것으로 생각됩니다. SSLV3에 보안 허점이 있어 WeChat에서는 더 이상 사용하지 않습니다. SSLV2 및 SSLV3 프로토콜 버전이므로 3으로 설정하면 오류가 발생합니다.
Nginx 환경에서 PHP가 사용하는 SSL 인증(https) 구성
위 내용은 Curl https가 PHP에서 SSL 인증을 건너뛰고 오류를 보고합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!