PHP中Curl https跳過ssl認證報錯

來源:互聯網
上載者:User
本文主要和大家分享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 built without SSLv2 support”
        這個應該比較容易理解就是SSL協議的版本號碼已經無效

  3. 設定成3時會有如下報錯:
        Linux環境報錯:”Encountered end of file”.
        Windows環境報錯:”Unknown SSL protocol error in connection to login.wx.qq.com:443 ”
        出現這個錯誤的原因網上查資料之後我認為是由於SSLV2和SSLV3存在安全性漏洞所以已經不再使用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. 設定成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 built without SSLv2 support”
        這個應該比較容易理解就是SSL協議的版本號碼已經無效

  3. 設定成3時會有如下報錯:
        Linux環境報錯:”Encountered end of file”.
        Windows環境報錯:”Unknown SSL protocol error in connection to login.wx.qq.com:443 ”
        出現這個錯誤的原因網上查資料之後我認為是由於SSLV2和SSLV3存在安全性漏洞所以已經不再使用SSLV2和SSLV3協議版本,所以我們設定成3時會出現錯誤。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.