2013-05-04 144 views
0

請在這個代碼看看工作:規範不無禁用SSL

<?php 
$url = "the_source_url"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
$result = curl_exec($ch); 
print_r($result); 
?> 

此頁由我的Android應用程序訪問,以獲得一些源的日期。 url返回一個json數據,我打印回來,然後在我的應用程序中處理數據並顯示它。這對我來說現在工作得很好(我仍處於測試階段)。

我在SO中讀到,禁用SSL(我在第6行做過)是有風險,不建議使用。但是,除非我禁用腳本,否則我無法使腳本正常工作。

如何在不禁用SSL的情況下工作?或者如何消除風險?

回答

2

禁用證書會讓你容易受到中間人攻擊導入證書,你可以下載使用該證書

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO_CERTIFICATE/cert.pem"); 

拿到證書按照本指南

然後點擊「查看證書」:

enter image description here

調出cerficates頁面的「詳細信息」選項卡,然後選擇層次結構頂部的證書。這是CA證書。

enter image description here

然後單擊「導出」和CA證書保存到您選擇的位置,並確保選擇X.509證書(PEM)作爲保存類型/格式。

enter image description here

Image Source : http://unitstep.net/

+0

我正在使用Google Places API。我無法找到它的證書! – iTurki 2013-05-04 12:18:34

+2

[下載證書](http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/)然後使用它.. – Baba 2013-05-04 12:22:04

+0

非常有用的鏈接。謝謝! – iTurki 2013-05-04 12:26:35

0

您需要添加的選項CURLOPT_SSL_VERIFYHOST並將其設置爲false

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 

這將禁用SSL主機驗證,這樣就可以訪問它使用自簽名證書的主機。如果主機有一個有效的證書,然後檢查@巴巴的回答

安全考慮:

的連接加密,無法被嗅探那麼容易。但是你不能確定服務器是服務器。所以黑客可以在中間人攻擊中使用一名男子嗅探交通。如果你想確保你必須去@Babas方式從服務器

+1

這做究竟是什麼? – iTurki 2013-05-04 12:12:41

+0

禁用SSL主機驗證,以便您可以訪問沒有簽名證書的主機。請參考手冊,我已經鏈接了它 – hek2mgl 2013-05-04 12:14:04

+0

這不就是'CURLOPT_SSL_VERIFYPEER'嗎?我認爲在安全性方面不安全? – iTurki 2013-05-04 12:15:45