【问题标题】:php curl ssl verifyphp curl ssl验证
【发布时间】:2018-09-14 06:03:26
【问题描述】:

我只是用php开发了一些softvare,用curllib连接amazon,paypal,wechat,我想验证cert,我发现一些参数和这个有关:

CURLOPT_SSL_VERIFYPEER:我想如果要验证ssl cert,这个参数应该设置为true;

但我对CURLOPT_CAINFO

感到困惑
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, $sslCertPath);
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, $sslKeyPath); 

什么时候应该设置CURLOPT_CAINFO,什么时候应该设置follow 4 params?

我认为CURLOPT_CAINFO 是一个参数,以确保亚马逊是亚马逊,贝宝是贝宝;

以下4个参数是为了确认我是真实的我,亚马逊可以通过这4个参数来确认。

我说的对吗?

我不知道如何获得CURLOPT_CAINFO ca?因为我认为如果我确认亚马逊是亚马逊,我只需验证亚马逊发送给我的 ca 就足够了,我为什么要向亚马逊发送 ca?

【问题讨论】:

    标签: php ssl curl


    【解决方案1】:

    如果你想使用 CURLOPT_SSL_VERIFYPEER 试试看:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem');
    

    在此处下载 cacert.pem https://curl.haxx.se/docs/caextract.html

    【讨论】:

      【解决方案2】:

      通常,当您从网站收到证书时 - 它包含网站自己的证书和中间证书(签署/颁发网站证书的证书)。为了验证它们,你必须有一个根证书列表(CA 是证书颁发机构的缩写),它被称为“CA 捆绑包”,通常位于/etc/ssl/certs/ca-bundle.crt。中间证书(可以有多个中间证书 - 它们中的每一个都将/必须由链中的下一个证书签名)必须由根证书签名才能被信任。

      因此,CURLOPT_CAINFO 的目的是允许您指定 ca-bundle.crt 的路径名,如果 cURL 无法自动找到它 - 或者如果您想检查您的自定义根证书。

      CURLOPT_SSLCERTCURLOPT_SSLKEY 的目的是提供一个客户端(而不是服务器)证书,以便服务器可以验证您的身份(通常用于在线银行,以便您可以签署交易)-您的用例中很可能不需要这些。

      CURLOPT_SSL_VERIFYPEER 的目的是让您能够强制 cURL 跳过对服务器证书的验证 - 以防您的 CA 包不是最新的或根本丢失。

      【讨论】:

        【解决方案3】:

        因此,在将此 cacert.pem 文件下载到您的项目后,您现在可以在 PHP 中执行此操作:

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
        curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");
        

        或者,这可以通过将以下内容添加到您的 php.ini 来全局设置

        curl.cainfo=/path/to/cacert.pem
        

        希望这对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-20
          • 2015-06-05
          • 2014-10-14
          • 2012-09-17
          • 2016-07-08
          • 1970-01-01
          • 2011-10-31
          • 1970-01-01
          相关资源
          最近更新 更多