2017-09-20 7 views
-1

Je dois signer un type de données xml avec une clé X509 privée Voici le code que j'ai utilisé: $ data-> save ("test.xml");Signature d'un type de données xml avec une clé privée X509

$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); 

L'erreur qu'il retourne est:

Attention: openssl_sign() attend le paramètre 1 pour être chaîne, objet donné dans C: \ xampp \ htdocs \ test \ index.php on line 32

+0

peut afficher la valeur $ data!? – M0ns1f

+0

Oui ... Mis à jour la question –

Répondre

1

bien le problème est que vous passez un fichier en tant que paramètre, au lieu d'une chaîne en fonction openssl_sign

vous devez vous convertir le document xml à str ing, essayez d'ajouter cette ligne

$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

Ouais ... Cela a fonctionné comme un charme. Je vous remercie –