如何在我的OS / PHP上启用CURLOPT_SSL_VERIFYHOST = 2支持

时间:2013-03-21 15:45:36

标签: php ssl curl

我一直在本地开发一个网站,根据中心登录进行身份验证。其中一个步骤是要求我向https资源发出curl请求以获取访问令牌。

curl配置的一部分是:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);                                         
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

如您所见,我注释掉了CURLOPT_SSL_VERIFYHOST选项。我已经在php.net和各种博客/ stackoverflow(Security consequences of disabling CURLOPT_SSL_VERIFYHOST (libcurl/openssl))上阅读了这些选项的含义。

在我的开发机器CURLOPT_SSL_VERIFYHOST 2上工作正常。我只是使用ubuntu 12.04 php5包中提供的vanilla php安装,以及php5-curl。

在生产(rackspace cloudsites)上,CURLOPT_SSL_VERIFYHOST 2无效,这就是为什么我将其更改为false以验证这是问题。看到我没有明确地做任何事情来在我的localhost上启用它我不知道什么指令/配置选项控制这个。

我的意思是“不工作”是指在生产时,当http_code设置为0时,curl调用返回VERIFYHOST 2。当我将其设置为FALSE时,它会返回状态代码200

我的问题是:

如何在Linux机器上启用SSL_VERIFYHOST

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:5)

对于'2',您必须确保SSL证书中的公用名与正在使用的主机名匹配。这是默认值,只要您为正在使用它的主机名(通用名称)正确创建SSL证书,这应该是直接的。

从PHP curl_setopt手册:

  

1检查SSL对等证书中是否存在公用名。 2检查是否存在公用名,并验证它是否与提供的主机名匹配。在生产环境中,此选项的值应保持为2(默认值)。

Manual Entry for curl_setopt