如果不禁用SSL,代码将无法运行

时间:2013-05-04 12:08:53

标签: php curl 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 个答案:

答案 0 :(得分: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页面的“Details”选项卡,然后选择层次结构顶部的证书。这是CA证书。

enter image description here

然后单击“导出”,并将CA证书保存到所选位置,确保选择X.509证书(PEM)作为保存类型/格式。

enter image description here

Image Source : http://unitstep.net/

答案 1 :(得分:0)

您需要添加CURLOPT_SSL_VERIFYHOST选项并将其设置为false

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

这会禁用SSL主机验证,以便您可以访问使用自签名证书的主机。如果主持人有有效证书,请查看@ Baba的答案

安全注意事项:

连接已加密,无法轻易嗅探。但是您无法确保服务器是服务器。因此,黑客可以利用中间人攻击来嗅探流量。如果你想确保你必须采用@Babas方式并从服务器导入证书