我试图通过PHP / curl(PHP 5.5.3)登录银行的网站来下载交易 . 我刚开始卷曲,所以我想弄清楚如何首先登录该网站 .

CURRENT CODE:

$postinfo = 'username=' . $username . '&password=' . $password;

$curl = curl_init();
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_NOBODY, false);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . '\certificateCA.cer');

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postinfo);

$content = curl_exec($curl);

if(false == $content){
    echo curl_error($curl);
}
curl_close($curl);


print $content;

ISSUE

我收到以下错误:

"SSL certificate problem: unable to get local issuer certificate"

WHAT I'VE TRIED

到目前为止,我已尝试根据this SO question的答案获取远程站点的证书 . 这似乎有所帮助,因为在我得到一个不同的错误之前("error setting certificate verify locations") . 我的代码中引用的 certificateCA.cer 是我从远程站点(银行)下载的证书,通过选择导出"Base-64 encoded X.509 (.CER)"选项 .

因为看起来我当前的问题与本地证书有关,而不是远程证书,我尝试从这里获取最新信息:https://curl.haxx.se/ca/cacert.pem每个SO answer .

我将以下行添加到我的php.ini文件中,并按this SO answer重新启动Apache:

curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"

this SO response,我也尝试更改文件名和对此的引用:

curl.cainfo = "C:\xampp\php\extras\ssl\ssl.txt"
openssl.cafile = "C:\xampp\php\extras\ssl\ssl.txt"

HOW YOU CAN HELP ME

  • 请帮我理解 CURLOPT_CAINFO . 这是期望远程站点的证书,还是本地机器?它似乎从文档中并不清楚它到底是什么样的 .

  • 一种解决方案,甚至是一种方法,通过它我可以对此问题进行分类并自行找到解决方案 . 这似乎对我有用,所以我做错了什么 .