我一直在本地开发一个网站,根据中心登录进行身份验证。其中一个步骤是要求我向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
?
非常感谢任何帮助。谢谢。
答案 0 :(得分:5)
对于'2',您必须确保SSL证书中的公用名与正在使用的主机名匹配。这是默认值,只要您为正在使用它的主机名(通用名称)正确创建SSL证书,这应该是直接的。
从PHP curl_setopt手册:
1检查SSL对等证书中是否存在公用名。 2检查是否存在公用名,并验证它是否与提供的主机名匹配。在生产环境中,此选项的值应保持为2(默认值)。