使用私人X509密钥签名xml数据类型

问题描述:

我需要使用私人X509密钥签署xml数据类型 以下是我用过的代码: $ data-> save(“test.xml”);使用私人X509密钥签名xml数据类型

$data = new DOMDocument("1.0", "utf-8"); 
$xml_order = $data->createElement("order"); 
$xml_tag1 = $data->createElement("signature","000"); 
$xml_tag2 = $data->createElement("service","000"); 
$xml_tag3 = $data->createElement("url"); 
$xml_tag_confirm = $data->createElement("confirm","yes"); 

$attr = $data->appendChild($xml_order); 
$attr->appendChild($xml_tag1); 
$attr->appendChild($xml_tag2); 
$url = $attr->appendChild($xml_tag3); 
$url->appendChild($xml_tag_confirm); 
$attr->setAttribute("type","ama"); 
$attr->setAttribute("id", "passwordiguess"); 
$attr->setAttribute("date", date("YmdHis")); 
$signature; 
$pkeyid = openssl_pkey_get_private(file_get_contents('./private.key')); 
$keyData = openssl_pkey_get_details($pkeyid); 
openssl_sign($data, $signature, $pkeyid); 
openssl_free_key($pkeyid); 

它返回的错误是:

警告:openssl_sign()预计参数1是串,对象在C中给出:在线路32 \ XAMPP \ htdocs中\测试\的index.php

+0

可以显示$ data值! – M0ns1f

+0

是的......更新了问题 –

很好的问题是你在openssl_sign函数传递一个文件作为参数,而不是字符串

应该转换你的XML文档为str请尝试添加此行

$data = new DOMDocument("1.0", "utf-8"); 
$xml_order = $data->createElement("order"); 
$xml_tag1 = $data->createElement("signature","000"); 
$xml_tag2 = $data->createElement("service","000"); 
$xml_tag3 = $data->createElement("url"); 
$xml_tag_confirm = $data->createElement("confirm","yes"); 

$attr = $data->appendChild($xml_order); 
$attr->appendChild($xml_tag1); 
$attr->appendChild($xml_tag2); 
$url = $attr->appendChild($xml_tag3); 
$url->appendChild($xml_tag_confirm); 
$attr->setAttribute("type","ama"); 
$attr->setAttribute("id", "passwordiguess"); 
$attr->setAttribute("date", date("YmdHis")); 
/* this would convert the xml document to string */ 
$output = $data->saveXML(); 
$signature; 
$pkeyid = openssl_pkey_get_private(file_get_contents('./private.key')); 
$keyData = openssl_pkey_get_details($pkeyid); 
/* then pass the $output to openssl_sign*/ 
openssl_sign($output, $signature, $pkeyid); 
openssl_free_key($pkeyid); 
+0

是的......这就像一个魅力。谢谢 –