使用私人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
答
很好的问题是你在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
是的......这就像一个魅力。谢谢 –
可以显示$ data值! – M0ns1f
是的......更新了问题 –