我最近遇到了一個問題,發佈數據到SSL證書更新的服務器。我做了一些研究,發現當CURLOPT_SSL_VERIFYPEER設置爲false時,發佈日期成功完成。有人可以解釋CURLOPT_SSL_VERIFYPEER和_VERIFYHOST之間的關係嗎?另外,如果我將VERIFYPEER設置爲false,那麼我是否不再通過安全連接傳輸數據?如果CURLOPT_SSL_VERIFYPEER爲false,數據傳輸是否不再安全?
非常感謝任何人的幫助。
我最近遇到了一個問題,發佈數據到SSL證書更新的服務器。我做了一些研究,發現當CURLOPT_SSL_VERIFYPEER設置爲false時,發佈日期成功完成。有人可以解釋CURLOPT_SSL_VERIFYPEER和_VERIFYHOST之間的關係嗎?另外,如果我將VERIFYPEER設置爲false,那麼我是否不再通過安全連接傳輸數據?如果CURLOPT_SSL_VERIFYPEER爲false,數據傳輸是否不再安全?
非常感謝任何人的幫助。
該連接仍將被SSL加密。您不會在使用經過驗證的正確證書的鏈接上執行此操作。任何人都可以創建自己的SSL證書,在您的瀏覽器和Web服務器支持的任何級別上執行完全可接受的加密。
但是,您會得到很多關於無法驗證證書真僞的投訴。這是爲了防止Joe M. Alicious創建自己的證書,聲稱自己是「microsoft.com」並設置了自己的Windows Update主機。該證書會說它是microsoft.com,但它不能作爲microsoft.com的實際身份驗證,因爲Verisign(或任何人)實際上沒有頒發該證書,並將自己的真實性標記(簽名證書)放在其上。
_VERIFYHOST用於檢查您連接到的URL(例如「microsoft.com」)的主機名是否在SSL證書中列出。如果將此選項設置爲false,則url/cert主機名不匹配將被忽略(例如,您在testbox.develhost.com上有一個開發框,但正在使用客戶端真實有效的'example.com'cert)。
_VERIFYPEER禁用驗證整個證書。這允許自簽名證書工作。否則,SSL庫會禁止證書頒發者無效。
但是無論如何設置,如果您強制通過連接,它將被ssl加密。
我想從我的測試中瞭解_VERIFYHOST和_VERIFYPEER之間的關係。
_VERIFYHOST檢查通用名稱(CN),因爲手動表示取決於選項1或2.此驗證僅檢查並生成錯誤消息大小寫失敗。驗證本身完全不影響連接,甚至發生驗證錯誤。它是_VERIFYPEER用來減少或繼續連接的結果。
_VERIFYPEER(1)檢查2件事情。首先,它使用CAINFO來檢查證書。如果CAINFO在curl選項中指定,則使用該值進行檢查,否則使用php.ini中指定的值進行檢查。其次,它檢查_VERIFYHOST的結果(案例集_VERIFYHOST設置爲1或2)。如果驗證通過了兩個條件,則連接將繼續。否則,連接將被切斷。
如果您禁用CURLOPT_SSL_VERIFYPEER,則不會驗證證書(並且CURLOPT_SSL_VERIFYHOST的值將被忽略)。因此,這會讓你無法抵禦中間人攻擊。這意味着您不再通過安全連接傳輸數據。
是的,數據是加密的,但它仍然不安全。你知道你發送到有人,但你不知道誰;您可能會將其發送給用戶的主要敵人(仔細加密,以便攻擊者除攻擊者之外無人可讀取數據)。這不好。如果您使用攻擊者的公鑰對其進行加密,那麼世界上的所有加密功能都不太好。
底線:不要禁用CURLOPT_SSL_VERIFYPEER。它讓你不安全。
有關更多信息,請參閱Security consequences of disabling CURLOPT_SSL_VERIFYHOST (libcurl/openssl)瞭解如何安全地使用cURL的SSL支持。
非常好,謝謝你一個簡潔的迴應。 – 2011-01-12 14:35:57