PHP cURL->下载带有证书和密码的文件

PHP cURL->下载带有证书和密码的文件,php,curl,https,download,ssl-certificate,Php,Curl,Https,Download,Ssl Certificate,我有证书文件cert.p12和该证书的密码yxc123yxc。 有了这个,我可以通过身份验证到一个网站并下载一个xml文件 如何在php中实现这一点?像这样尝试,但$response是错误的 $cert = "cert.p12"; $pass = "yxc123yxc"; $url = "https://url.to.download"; $curlhandle = curl_init(); curl_setopt($curlhandle, CURLOPT_URL, $url); #cur

我有证书文件cert.p12和该证书的密码yxc123yxc。 有了这个,我可以通过身份验证到一个网站并下载一个xml文件

如何在php中实现这一点?像这样尝试,但$response是错误的

$cert = "cert.p12";
$pass = "yxc123yxc";
$url  = "https://url.to.download";

$curlhandle = curl_init();

curl_setopt($curlhandle, CURLOPT_URL, $url);
#curl_setopt($curlhandle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlhandle, CURLOPT_PORT , 443); 
curl_setopt($curlhandle, CURLOPT_SSLVERSION, 3);
curl_setopt($curlhandle, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curlhandle, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curlhandle, CURLOPT_SSLCERT, getcwd() . $cert);
curl_setopt($curlhandle, CURLOPT_SSLCERTPASSWD, $cert);
$response = curl_exec($curlhandle);

我猜证书的路径是错误的,因为PHP函数返回的路径没有结束斜杠。因此,您的证书路径可能如下所示:

/var/www/website/directorycert.p12

另外,对于编程来说,知道如何调试程序是绝对必要的。始终使用函数,这些函数会返回错误代码和试图调试的操作消息。还可以打印变量的值以查看它们是否包含您期望的内容

您还可以使用一些PHP调试器,例如一个名为。如果您将IDE与该调试器连接,则不必手动打印变量值,您可以单步执行脚本等。

刚刚添加

curl_setopt($curlhandle, CURLOPT_SSLCERTTYPE, "P12"); 
到php代码

=>curl\u错误: SSL证书问题,请验证CA证书是否正常。细节:
错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败

从使用函数开始查看,有什么问题。curl\u error->无法使用客户端证书找不到密钥或错误的密码短语?很好,因此您可能有错误的证书、密码或证书路径。我会按照这个顺序检查它们。例如,尝试文件_existsgetcwd$另外,我猜getcwd返回的路径没有结束斜杠,因此您的证书路径是错误的-文件名前缺少斜杠。尝试echo getcwd$证书外观如何?路径是否正确->var\u dump file\u existsgetcwd$证书;->真有趣。根据PHP文档,函数getcwd.OK的返回值中应该没有结束斜杠。很高兴您已经解决了这个问题。请将其标记为答案,以便帮助他人。那么,为什么要将其作为答案发布?请尝试用谷歌搜索您收到的错误消息或其部分。例如: