この記事では主に、PHP での Curl https による 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; }
上記のメソッドは、ユーザーcurlがhttpsリクエストを開始するための関数です。CURLOPT_SSLVERSION項目は、SSLプロトコルのバージョンを1/2/3に設定できるとしていますが、私のテストの結果では。
1 時に設定すると、バージョン php 5.2.11 で次のエラーが報告されます:
"error:14077458:SSLルーチン:SSL23_GET_SERVER_HELLO:reason(1112)"
の理由ここで報告されるエラーは、php の openssl のバージョンが低すぎるということです。解決策は、php が 5.3.60 に達していることです (どのバージョンが高いかはテストしていませんが、openssl のバージョンが 5.3.60 より大きい限りは問題ありません)。 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ルーチン:SSL23_GET_SERVER_HELLO:reason(1112)”
2 に設定すると、次のエラーが報告されます:
Linux 環境で報告されたエラー: 「ファイルの終わりに遭遇しました」
Windows 環境で報告されたエラー: 「login.wx.qq.com への接続で不明な SSL プロトコル エラーが発生しました:443」
このエラーの理由は、オンラインで情報を確認したところ、SSLV2 が原因であると思われます。SSLV3 にはセキュリティ ホールがあるため、WeChat は使用されなくなりました。 SSLV2 と SSLV3 のプロトコル バージョンがあるため、3 に設定するとエラーが発生します。
Nginx 環境で PHP によって使用される SSL 認証 (https) を構成する
以上がCurl https が PHP での SSL 認証をスキップし、エラーを報告するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。