ホームページ > バックエンド開発 > PHPチュートリアル > Curl https が PHP での SSL 認証をスキップし、エラーを報告する

Curl https が PHP での SSL 認証をスキップし、エラーを報告する

小云云
リリース: 2023-03-20 15:48:01
オリジナル
10299 人が閲覧しました

この記事では主に、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. 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. 2 に設定すると、次のエラーが報告されます:
    Linux 環境のエラー: 「SSL バージョンの範囲が無効です。」
    Windows 環境では、エラー メッセージが報告されます: 「OpenSSL は、 SSLv2 サポート」
    これは理解しやすいはずです。つまり、SSL プロトコルのバージョン番号が無効です。 3 に設定すると、次のエラーが報告されます:

    Linux 環境エラー: 「ファイルの終わりに遭遇しました」。
  3. Windows環境エラー:「login.wx.qq.com:443への接続で不明なSSLプロトコルエラーが発生しました」
  4. このエラーの原因 ネットで情報を確認したところ、SSLV2とSSLV3によるものと思われます セキュリティホールがあるため、 WeChat は SSLV2 および SSLV3 プロトコル バージョンを使用しなくなったため、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;
    }
    ログイン後にコピー
    ログイン後にコピー

    上記のメソッドは、ユーザー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 のバージョンが 0.9.8 以降であれば問題ありません)。


  1. 2 に設定すると、次のエラーが報告されます:

    Linux 環境のエラー: 「SSL バージョンの範囲が無効です。」
  2. Windows 環境のエラー: 「OpenSSL は SSLv2 サポートなしで構築されました」
  3. これは、つまり、SSL プロトコルのバージョン番号が 3 に設定されている場合、次のエラーが報告されます:

    Linux 環境で報告されたエラー: 「ファイルの終わりに遭遇しました」
    Windows 環境で報告されたエラー: 「login.wx.qq.com への接続で不明な SSL プロトコル エラーが発生しました:443」
    このエラーの理由は、オンラインで情報を確認したところ、SSLV2 が原因であると思われます。SSLV3 にはセキュリティ ホールがあるため、WeChat は使用されなくなりました。 SSLV2 と SSLV3 のプロトコル バージョンがあるため、3 に設定するとエラーが発生します。

  4. 関連する推奨事項:




    Nginx 環境で PHP によって使用される SSL 認証 (https) を構成する

以上がCurl https が PHP での SSL 認証をスキップし、エラーを報告するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート