11
什麼是啓用CURLOPT_SSL_VERIFYPEER和禁用CURLOPT_SSL_VERIFYHOST的安全後果?安全後果(libcurl中/ OpenSSL的)
什麼是啓用CURLOPT_SSL_VERIFYPEER和禁用CURLOPT_SSL_VERIFYHOST的安全後果?安全後果(libcurl中/ OpenSSL的)
CURLOPT_SSL_VERIFYPEER檢查遠程證書是有效的,即你相信它是由你信任的CA,它是真正的發行。
CURLOPT_SSL_VERIFYHOST檢查證書是否發給您想與之通話的實體。
將其與現實生活中的情況下,VERIFYPEER就像是檢查ID的形式是一個你認識(即從你信任的國家的護照,從你知道一個公司的員工卡,.. )。 VERIFYHOST就像查看你想與之通話的卡片上的實際名稱。
如果您不使用VERIFYHOST(正確的值爲2,而不是1,btw),您將禁用主機名驗證並打開MITM攻擊的大門:任何具有您信任的ID形式的人都可以模擬您信任的一組ID,例如任何持有有效護照的人都可以假裝他們是擁有有效護照的人。
謝謝你詳細解答。這使我想到了另一個快速問題:我收到了一個網站,其中包含有效的SSL證書 https://www.example.com(cn = www.example.com,因爲它應該)。當我通過它的IP地址訪問網站時,它會顯示證書錯誤(因爲cn不匹配),移除SSL_VERIFYHOST將解決它,但會將其打開爲MiTM攻擊。 處理這個問題的正確解決方案是什麼? (允許通過IP地址連接而不顯示錯誤)。僅使用CURLOPT_SSL_CTX_FUNCTION替換整個驗證方法以驗證特定IP地址是否與CN匹配? – user1782427
你爲什麼要連接IP地址?它是來自您自己的CA(或自簽名)的證書嗎? – Bruno
我有2個服務器(1.1.1.1和2.2.2.2),example.com的DNS包含2個A記錄(這些IP地址)。客戶端隨機選擇其中一個並連接到IP地址而不是主機名。我希望openSSL在檢查通用名稱字段時給我打電話,以便我可以將證書通用名與example.com進行比較,如果沒關係,我會接受證書。我還沒有看到,libcurl支持,所以我假設我必須寫我自己的實現。 example.com的證書是受信任的Verisign證書。 – user1782427