php - SSL 对等证书或 SSH 远程 key 不正确

标签 php apache ssl curl

我正在测试一个使用 curl_exec php 函数和 CA 证书的 API,但出了点问题,我有点迷茫。

我已经在我的 apache VirtualHost 上配置了 SSL,看起来没问题(打开 https:://[myVHost]... 有效)。

但是 API curl 调用返回了这条消息:

  • SSL 对等证书或 SSH 远程 key 不正确

我对 SSL 不是很有经验,所以我不知道这是什么原因。

更新:

这是我在我的 cURL 请求中使用的代码,我注释了 2 行并更改了它们的值(查看“TODO”行)并且以这种方式它正在工作,但这只是一个工作范围.. .

$opts[CURLOPT_URL] = $url;
    $opts[CURLOPT_RETURNTRANSFER] = true;
    $opts[CURLOPT_CONNECTTIMEOUT] = 50;
    $opts[CURLOPT_TIMEOUT] = 100;
    $headers = array(
        'Accept: application/json',
        "User-Agent: APIXXX-PHP-Client");
    $opts[CURLOPT_HTTPHEADER] = $headers;
    $opts[CURLOPT_USERPWD] = $env->getApiKey() . ':';
    if (certificatePresent()) {

        //  $opts[CURLOPT_SSL_VERIFYPEER] = true;
        //  $opts[CURLOPT_SSL_VERIFYHOST] = 2;

        // TODO: SET IT BACK
        $opts[CURLOPT_SSL_VERIFYPEER] = 0;
        $opts[CURLOPT_SSL_VERIFYHOST] = 0;

        $opts[CURLOPT_CAINFO] = $path

      }

    curl_setopt_array($curl, $opts);

    $response = curl_exec($curl);

最佳答案

您可能正在使用自签名 SSL 证书,当设置了 CURLOPT_SSL_VERIFYPEER 选项时,该证书不会通过。

有两种解决方法:

  1. 设置有效的 SSL 证书。
  2. 在 Curl 中禁用 SSL 验证。 ( add --insecure option )

如果您禁用验证,您将无法确定您是否真的在与您的主机通信。 所以这取决于您需要的安全级别。

关于php - SSL 对等证书或 SSH 远程 key 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14192837/

相关文章:

apache - 如何在没有负载平衡的情况下为单个 apache 服务器实现多个 tomcat 实例?

android - 在公钥基础设施中使用 square okHTTP 库的 HTTPS/SSL

ssl - 在 Amazon CloudFront 上通过 HTTPS 提供静态内容

qt - 在 Ubuntu 16.04.1 上使用 OpenSSL 构建 Qt 失败

javascript - 使用 Javascript 验证 PHP 表单数据

php - 显示好友列表中的好友

php - 从多行中选择

apache - Meteor DDP SSL/Apache 代理连接

php - 变量引用自身

regex - 301重定向将所有空格替换为连字符