首頁  >  文章  >  後端開發  >  PHP中Curl https跳過ssl認證報錯

PHP中Curl https跳過ssl認證報錯

小云云
小云云原創
2018-03-01 13:55:3410241瀏覽

本文主要和大家分享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 routines:SSL23_GET_SERVER_HELLO:reason(1112)” ## ₀的原因是你的php中openssl的版本過低解法是升級你的php到5.3.60(具體是高於哪個版本我沒有測試,應該只要openssl版本大於0.9.8版本就可以的)

  2. #設定成2時會有如下報錯:

        Linux環境報錯:"SSL version range is not valid.”
        Windows環境報錯:"OpenSSL was 79 #SL」 ##    這個應該比較容易理解就是SSL協定的版本號碼已經無效

  3. 設定成3時會有如下報錯:
  4.     Linux環境錯誤:”Encountered end of file”.

        Windows環境報錯:」Unknown SSL protocol error in connection to login.wx.qq.com:443 」
        出現這個錯誤的原因網上查資料之後我認為是由於SSLV2所以微信33不再使用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;
    }
  5. 上面方法是用戶curl發起https請求的功能,CURLOPT_SSLVERSION項是規定ssl協定版本的,網路上的程式碼很多都說可以設定成1/2/3但是我測試的結果如下:

    設定成1時在php 5.2.11版本會有下列錯誤:
  1.      “error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)

        此處報錯的原因是你的php中openssl的版本過低解決辦法是升級你的php到5.3.60(具體是高於哪個版本我沒有測試,應該只要openssl版本大於0.9.8版本就可以的)

  2. 設定成2時會有如下報錯:
  3.     Linux環境報錯:”SSL version range is not valid.”

        Windows built without SSLv2 support”
        這個應該比較容易理解就是SSL協議的版本號已經無效

  4. 設置成3時會有如下報錯:
  5.     Linux環境報錯:” Encountered end of file”.

        Windows環境報錯:”Unknown SSL protocol error in connection to login.wx.qq.com:443 ”
        出現這個數據錯誤的原因是網上查LV2之後我認為存在安全漏洞所以微信已經不再使用SSLV2和SSLV3協定版本,所以我們設定成3時會出現錯誤。

  6. 相關推薦:


Nginx環境下設定PHP使用的SSL認證(https)

#

以上是PHP中Curl https跳過ssl認證報錯的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn