2017-09-20 15 views
-1

プライベート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

は$データ値を表示できます! – M0ns1f

+0

はい...質問を更新しました –

答えて

1

も問題はあなたがstrをすることができ、XML文書を変換する必要がありopenssl_sign機能で文字列の代わりに、あなたは、パラメータとしてファイルを渡している

ですこの行を追加してみてください。

$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

ええと...それは魅力的でした。ありがとうございました –

関連する問題