有没有xmlseclibs的文档?

时间:2014-07-23 22:51:42

标签: php xml-signature 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'); 
?>

Additionaly也希望从这个图书馆:

  1. 了解官方和可信任的存储库以确保库未损坏。
  2. 关闭&#34; ds:&#34;前缀(因为我生成的XML的示例和文档都不包括这样的前缀)。
  3. 对Base64类型值中的每个X字符进行换行。
  4. 完全缩进(否则根本没有)。
  5. 我从enter link description here

    获得了图书馆

    提前致谢。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分: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();
    );
}