2010-05-20 68 views
1

我正在將Facebook Connect集成到我們的應用程序中。我認爲使用Facebook官方SDK http://github.com/facebook/php-sdk是最好的方法,因爲它是在FB Developers wiki上公佈的。Facebook連接PHP SDK Curl Peer SSL驗證錯誤

但我無法設法使其工作。在調查API代碼時,我記得以前關於CURLOPT_SSL_VERIFYPEER參數的經驗。此參數的默認值爲「true」,並且在API中未設置,隱含地將其設置爲true。

我將CURLOPT_SSL_VERIFYPEER參數更改爲false,並解決了問題。使用它爲true,我可以從Graph API for/get/me查詢中得到的是「boolean(false)」,但是將CURLOPT_SSL_VERIFYPEER參數設置爲false相同的捲曲查詢爲我提供了用戶json對象。

我想問的是,使用Facebook PHP SDK的副作用是「CURLOPT_SSL_VERIFYPEER」參數設置爲false。更一般地說,如果我在沒有同行驗證的情況下啓動一個捲曲會話,是否有意義。

回答

2

您的PHP安裝有問題。很可能,您沒有需要驗證SSL證書的ENTRUST中間證書。這是他們的證書鏈,

Certificate chain 
0 s:/C=US/ST=California/L=Palo Alto/O=Facebook, Inc./CN=*.facebook.com 
    i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3 
1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3 
    i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA 
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA 
    i:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority 

設置CURLOPT_SSL_VERIFYPEER爲false僅僅關閉證書檢查。你不應該在生產中這樣做。

+0

爲什麼我不應該在生產中禁用這個功能,在安全性方面?還有一件事,我該如何檢查哪個證書。在我失蹤的鏈中,以及如何安裝「在鏈中」? – Lashae 2010-05-22 06:20:41

+0

如果您不驗證對等方(服務器),您沒有證據證明它是您請求的預期收件人。它可能是任何人,也許是黑客記錄你的密碼或OAuth令牌。有關更多詳細信息,請參見http://www.tehuber.com/article.php?story=20090125114837262。 – 2010-10-18 16:28:26

-3

試試這個,它解決了這個問題對我來說

的Facebook :: $ CURL_OPTS [CURLOPT_SSL_VERIFYPEER] = FALSE; Facebook :: $ CURL_OPTS [CURLOPT_SSL_VERIFYHOST] = 2;

+1

這根本就不是解決方案,而且是安全最差的做法 – 2010-10-18 16:28:54

+0

@david考慮安全性,更好的方法是什麼? – 2010-11-26 10:10:49

+1

http://www.tehuber.com/article.php?story=20090125114837262可以幫助你。基本上,如果你不驗證對方,你很容易受到中間人攻擊,在那裏有人可以冒充終端,假裝成Facebook服務器。 – 2010-11-30 12:02:39