XML に署名しましたが、KeyValue 要素を署名に含める方法がわかりません。いくつかのドキュメントがあると、多くの時間を節約できます。
以下のコード (興味がある場合) は、これまでに xmlseclibs で何とかできたことです。
<?php
require('xmlseclibs.php');
XML 文字列
$getToken = '<getToken>
<item>
<Semilla>Random string</Semilla>
</item>
</getToken>';
XML オブジェクトの作成 (署名用)
$getToken_DOMDocument = new DOMDocument();
$getToken_DOMDocument -> loadXml($getToken);
xmlseclibs を使用した署名オブジェクトの作成
$getToken_XMLSecurityDSig = new XMLSecurityDSig();
$getToken_XMLSecurityDSig -> setCanonicalMethod(XMLSecurityDSig::C14N);
機能しなかった ds: プレフィックスをオフにしようとしています
$options['prefix'] = '';
$options['prefix_ns'] = '';
$options['force_uri'] = TRUE;
$options['id_name'] = 'ID';
$getToken_XMLSecurityDSig -> addReference($getToken_DOMDocument, XMLSecurityDSig::SHA1, array('http://www.w3.org/2000/09/xmldsig#enveloped-signature', 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315'), $options);
必要な鍵データへのアクセス
$XMLSecurityKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type'=>'private'));
$XMLSecurityKey -> loadKey('../../DTE/certificado/firma/certificado.pem', TRUE);
/* if key has Passphrase, set it using $objKey -> passphrase = <passphrase> */
XML オブジェクトへの署名
$getToken_XMLSecurityDSig -> sign($XMLSecurityKey);
公開鍵の追加
$getToken_XMLSecurityDSig -> add509Cert(file_get_contents('../../DTE/certificado/firma/certificado.pem'));
エンベロープ署名を XML オブジェクトに追加する
$getToken_XMLSecurityDSig -> appendSignature($getToken_DOMDocument -> documentElement);
署名付き XML コードをファイルに保存する
$getToken_DOMDocument -> save('sign-basic-test.xml');
?>
さらに、このライブラリからも希望します:
- ライブラリが破損していないことを確認するために、公式で信頼できるリポジトリを知っておいてください。
- 「ds:」接頭辞をオフにします (私が作成している XML の例にもドキュメントにもそのような接頭辞が含まれていないため)。
- Base64 型の値の X 文字ごとに改行します。
- 完全なインデント (それ以外の場合はまったくありません)。
ここにリンクの説明を入力してライブラリを取得しました
前もって感謝します。