Есть ли документация для xmlseclibs?
Я подписал 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, которую я создаю, не содержат такого префикса).
- Разрывы строки каждые X символов в значениях типа Base64.
- Полный отступ (в противном случае вообще ничего).
Я получил библиотеку от введите ссылку ссылку здесь
Заранее спасибо.
2 ответа
Я написал библиотеку фасадов под названием xmldsig для упрощения использования подчеркивания XMLSecLibs
С этой библиотекой код приведен так:
public function testSign()
{
$getToken = '<getToken>
<item>
<Semilla>Random string</Semilla>
</item>
</getToken>';
$data = new DOMDocument();
$data->loadXml($getToken);
$adapter = new XmlseclibsAdapter();
$adapter
->setPrivateKey(file_get_contents('privateKey.pem'))
->setPublicKey(file_get_contents('publicKey.pem'))
->setCanonicalMethod('http://www.w3.org/2001/10/xml-exc-c14n#')
->sign($data);
echo $data->saveXML();
);
}
Вот список ссылок, которые могут помочь с этими проблемами:
Как проверить подпись с phpseclib, в сообщении подписи XML?
http://code.google.com/p/xmlseclibs/issues/detail?id=13
Какая правильная XML исключительная канонизация?
Не уверен, что это все решит, но должно немного помочь вам.