【问题标题】:Signing xml data type with a private X509 key使用私有 X509 密钥签署 xml 数据类型
【发布时间】:2017-09-20 14:54:23
【问题描述】:

我需要使用私有 X509 密钥对 xml 数据类型进行签名 这是我使用的代码: $data->save("test.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 是字符串,对象在第 32 行的 C:\xampp\htdocs\test\index.php 中给出

【问题讨论】:

  • 可以显示$data值!?
  • 是的...更新了问题

标签: php xml ssl encryption x509


【解决方案1】:

问题是您将文件作为参数传递,而不是 openssl_sign 函数中的字符串

你应该把你的 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"));
 /* 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);

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2014-06-17
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多