don*_*ias 3 php https curl ssl-certificate
我有2个PHP脚本,发送一个xml文件并捕获它.我正在使用cURL,一切都很好.现在我尝试做同样的事情,但使用HTTP over SSL(HTTPS).我已经安装了一个带有XAMPP的本地服务器,我按照以下帖子设置了SSL:在本地xampp/apache服务器上设置SSL.
我试图像这样发送xml文件:
<?php
/*
* XML Sender/Client.
*/
// Get our XML. You can declare it here or even load a file.
$xml = file_get_contents("data.xml");
// We send XML via CURL using POST with a http header of text/xml.
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
//i use this line only for debugging through fiddler. Must delete after done with debugging.
curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888');
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "https://ipv4.fiddler/iPM/receiver.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_REFERER, 'https://ipv4.fiddler/iPM/receiver.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ch_result = curl_exec($ch);
echo "Result = ".$ch_result;
curl_close($ch);
// Print CURL result.
?>
Run Code Online (Sandbox Code Playgroud)
我从这里下载了cURL的新证书:
http://curl.haxx.se/ca/cacert.pem
我不知道我应该把证书放在哪里,但我把它放在我这个项目的工作区目录中.
现在的问题是XML文件永远不会发送到接收器.有任何想法吗?
在cacert.pem您传递卷曲通过CURLOPT_CAINFO用于验证的证书颁发机构,但开发服务器通常具有不包含在捆绑的自签名的证书.
第一步是生成自己的自签名证书.本文逐步介绍了该过程.确保在CSR生成期间,您正在使用Common Name (CN)例如下的目标服务器名称ipv4.fiddler.
使用自签名证书(例如server.crt)和密钥(例如server.key)配置Web服务器后,需要将前者复制到脚本可以访问的位置.
以下几个基本要素可用于验证整个事情:
$ch = curl_init('https://ipv4.fidler');
curl_setopt_array($ch, array(
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_VERBOSE => true,
CURLOPT_CAINFO => '/path/to/server.crt',
));
if (false === curl_exec($ch)) {
echo "Error while loading page: ", curl_error($ch), "\n";
}
Run Code Online (Sandbox Code Playgroud)