php - 如何在我的操作系统/PHP 上启用 CURLOPT_SSL_VERIFYHOST = 2 支持

标签 php ssl curl

我一直在本地开发一个网站,该网站可根据集中登录进行身份验证。其中一个步骤是要求我向 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 调用返回 0http_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).

Manual Entry for curl_setopt

关于php - 如何在我的操作系统/PHP 上启用 CURLOPT_SSL_VERIFYHOST = 2 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552052/

相关文章:

curl - Tor 不是 HTTP 代理

php - 删除时的横幅图像不重复编号

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - Codeigniter form_validation 创建自定义规则/过滤器

postgresql - 无法在 PostgreSQL 9.5 中运行 psql

html - 在端口 443 而不是 80 上加载网站

python - 将 Curl "-I --user"转换为 Python 请求

php 函数 mail() 不工作

python - ThreadingTCPServer 与 ThreadingMixIn HTTPServer

python - 如何使用Python请求设置媒体类型?