2009-02-06 66 views
33

我正嘗試使用php和curl庫下載安全(使用https)網頁的內容。使用CURL讀取SSL頁面(php)

但是,讀取失敗,並且出現錯誤60:「SSL證書問題,請驗證CA證書是否正常。」

還 「詳細信息:SSL3_GET_SERVER_CERTIFICATE:證書驗證失敗」

所以...非常自我解釋錯誤味精的。

我的問題是:如何發送SSL證書(正確的?)並獲取此頁來驗證它並讓我進入?

而且,這裏是我的選擇數組中如果你想知道:

$options = array(
     CURLOPT_RETURNTRANSFER => true,  // return web page 
     CURLOPT_HEADER   => false, // don't return headers 
     CURLOPT_FOLLOWLOCATION => true,  // follow redirects 
     CURLOPT_ENCODING  => "",  // handle all encodings 
     CURLOPT_USERAGENT  => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", // who am i 
     CURLOPT_AUTOREFERER => true,  // set referer on redirect 
     CURLOPT_CONNECTTIMEOUT => 120,  // timeout on connect 
     CURLOPT_TIMEOUT  => 120,  // timeout on response 
     CURLOPT_MAXREDIRS  => 10,  // stop after 10 redirects 
     CURLOPT_SSL_VERIFYHOST => 1, 
    ); 

任何建議將是巨大的, 安德魯

+0

想想[本條](http://curl.haxx.se/docs/sslcerts。 HTML)是你需要的。 – Sergii 2009-02-06 18:05:51

回答

48

這聽起來像你可能會被誤解的錯誤。它看起來像我連接到的網站是自簽名或一些其他常見問題。就像通常的瀏覽器警告一樣,最簡單的解決方法是禁用檢查。

您需要將CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST設置爲FALSE。這應該禁用兩個主要檢查。他們可能都不是必需的,但這至少應該讓你去。

要清楚,這將禁用旨在保護您的功能。只有在通過其他方式驗證了證書和服務器的情況下才能執行此操作。

在PHP網站更多信息:curl_setopt()

+0

亞,...我之前閱讀過這篇文章,但是將這兩個值設置爲false對我來說沒有任何意義......我想我不知道發生了什麼。然而,它的工作完美。所以謝謝:) – Andrew 2009-02-06 18:14:07

+0

這節省了我幾個小時的工作!謝謝 ! – liveandream 2012-12-30 08:59:34

+13

不要這樣做。它是INSECURE。相反:http://docforge.com/wiki/PHP/Curl – 2013-09-18 15:16:26

0

你不發送的SSL證書。 SSL證書出現問題,因爲它安裝在您要聯繫的主機上。使用選項-k或--insecure來越過投訴。

啊。請參閱Ryan Graham的回答

21

如果你想使用SSL對等認證(關閉它並不總是好主意),你可以使用在Windows下一個解決方案在全球範圍的所有應用程序:

  1. 下載文件,根證書從這裏: http://curl.haxx.se/docs/caextract.html
  2. 添加到php。INI:

curl.cainfo=C:/path/to/cacert.pem

這是所有魔法,嫋嫋現在可以驗證證書。

(因爲我知道有在Linux上沒有這樣的問題,至少在Ubuntu)

6

即使在SO以下意見後..您可能仍然有這樣一個錯誤的問題:

error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error 

問題與SSL的版本。對版本3使用以下內容

curl_setopt($ch, CURLOPT_SSLVERSION,3) 

我假設您已啓用對等和主機的驗證,並指向實際的證書文件。例如。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem"); 
0

這顯然是在openssl的bug。 Tomcat的配置可以通過限制可用的密碼列表來解決這/etc/tomcat7/server.xml:

<Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>