我一直在本地开发一个网站,该网站可根据集中登录进行身份验证。其中一个步骤是要求我向 https 资源发出 curl 请求以获取访问 token 。
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 包和 php5-curl 中提供的 vanilla php 安装。
在生产(rackspace cloudsites)上 CURLOPT_SSL_VERIFYHOST 2
不工作,这就是为什么我将它更改为 false 以验证这是问题所在。鉴于我没有明确地做任何事情来在我的本地主机上启用它,我不知道是什么指令/配置选项控制它。
我所说的“不工作”是指在生产环境中,当 VERIFYHOST
时,curl 调用返回 0
的 http_code
设置为 2
。当我将它设置为 FALSE
时,它返回状态代码 200
我的问题是:
我如何在 linux 机器上启用 SSL_VERIFYHOST
?
如有任何帮助,我们将不胜感激。谢谢。
最佳答案
对于“2”,您必须确保 SSL 证书中的通用名称与正在使用的主机名匹配。这是默认设置,只要您的 SSL 证书是为您正在使用它的主机名(通用名称)适当创建的,就应该是直接的。
来自 PHP curl_setopt 手册:
1 to check the existence of a common name in the SSL peer certificate. 2 to check the existence of a common name and also verify that it matches the hostname provided. In production environments the value of this option should be kept at 2 (default value).
关于php - 如何在我的操作系统/PHP 上启用 CURLOPT_SSL_VERIFYHOST = 2 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552052/