2013-05-04 58 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