【问题标题】:php curl: SSL_VERIFYPEER option doesn't have effectphp curl:SSL_VERIFYPEER 选项无效
【发布时间】:2013-04-19 16:01:25
【问题描述】:

我有这段代码可以用 curl 启动查询:

function curl_query($full_url, $username, $password, $payload) {
    $additionalHeaders = "";
    $process = curl_init($full_url);
    curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded', $additionalHeaders));
    curl_setopt($process, CURLOPT_HEADER, 0);
    curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($process, CURLOPT_TIMEOUT, 30);
    curl_setopt($process, CURLOPT_POST, 1);
    curl_setopt($process, CURLOPT_POSTFIELDS, $payload);
    curl_setopt($process, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($process, CURLOPT_MAXREDIRS, 4);
    curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE);
    $return = curl_exec($process);
    if ($return === false) {
        error_log("CURL error ".curl_error($process));
    }
    return $return;
}

选项 CURLOPT_SSL_VERIFYPEER 设置为 false,因此我可以读取带有自签名证书的页面。但是,当我针对 https URL 执行此代码时,出现错误:

CURL error SSL: certificate subject name 'localhost' does not match target host name '192.168.1.1',

我在安装了 php53 包的 CentOS 5 服务器上运行此代码。

提前致谢

【问题讨论】:

    标签: php curl ssl


    【解决方案1】:

    添加选项CURLOPT_SSL_VERIFYHOST

    curl_setopt($process, CURLOPT_SSL_VERIFYHOST, FALSE);
    

    我意识到,英文版的 PHP 文档缺少这些重要信息:

    (翻译自德文版 PHP 手册)

    如果 CURLOPT_SSL_VERIFYPEER 已停用,则必须将 CURLOPT_SSL_VERIFYHOST 设置为 true 或 false。

    【讨论】:

    • 多么明显。 CURLOPT_SSL_VERIFYHOST CURLOPT_SSL_VERIFYPEER 都有。我错过了;这救了我。谢谢!
    【解决方案2】:
    curl_setopt($process, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($process,CURLOPT_SSL_VERIFYHOST, FALSE);
    

    将此添加到行会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多