使用PHP使用XDAES-EPES对xml进行签名
我需要使用XDAES-EPES签署一个文档,为此我正在使用PHP 使用下面的xml,我已经能够在下面给出的示例中计算摘要值使用PHP使用XDAES-EPES对xml进行签名,php,xml,sign,xml-signature,Php,Xml,Sign,Xml Signature,我需要使用XDAES-EPES签署一个文档,为此我正在使用PHP 使用下面的xml,我已经能够在下面给出的示例中计算摘要值ql0urtXTsc9W0GMIhTdzYHXnQYfnieoIttOBn9fGw7A=,但我想知道另一个5JVZPTwN5Lj0sGTfFzaUeMKCo/xbcaj7fw6luftzik=是如何计算的 我将此XML用作测试用例: <?xml version="1.0" encoding="UTF-8" xs:xmlns="https://tribunet.hacie
ql0urtXTsc9W0GMIhTdzYHXnQYfnieoIttOBn9fGw7A=
,但我想知道另一个5JVZPTwN5Lj0sGTfFzaUeMKCo/xbcaj7fw6luftzik=
是如何计算的
我将此XML用作测试用例:
<?xml version="1.0" encoding="UTF-8" xs:xmlns="https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.2/FacturaElectronica_V.4.2.xsd"?>
<FacturaElectronica>
<Clave>1</Clave>
<NumeroConsecutivo>1</NumeroConsecutivo>
<FechaEmision>1</FechaEmision>
<Emisor>1</Emisor>
<Receptor>1</Receptor>
<CondicionVenta>1</CondicionVenta>
<CondicionVenta>1</CondicionVenta>
<MedioPago>1</MedioPago>
<DetalleServicio>1</DetalleServicio>
<ResumenFactura>1</ResumenFactura>
<Normativa>1</Normativa>
</FacturaElectronica>
1.
1.
1.
1.
1.
1.
1.
1.
1.
1.
1.
我应该用与此类似的东西对其进行签名(注意:SignatureValue和X509Certificate已被截断):
非(祖先或自身::ds:Signature)
QL0URTxtSC9W0GMIHTDZYHXNQYFNIEOITOTOBN9FGW7A=
5JVZPTwN5Lj0sGTfFzaUeMKCo/XBCAJ7FW6TUFTZIK=
Mt1TUuPK3W8/0ERTJX5GT45GV9BHVMJW。。。。
MIIFpTCCBI2gAwIBAgIKK+。。。
2016-11-25T16:35:06Z
LoXZC86JwDL7zWC35qj7Q4AzrRQ=
CN=CA SINPE-PERSONA FISICA,OU=金融服务部,O=哥斯达黎加中央银行,C=CR,2.5.4.5=#130c342d3030302d303034303137
207422209224813750547132
https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.1/Resolucion_Comprobantes_Electronicos_DGT-R-48-2016.pdf
NMI5NJK1ZTHKNZI0MimimgjmzdayndC4yjuwnzkzodm2ntbiowuxntbkmi2yjgzzzjm2intzlndQ4owqzmq==
应用程序/八位字节流
我刚开始阅读一个类似的主题,所以这只是一个想法,我没有尝试过,但我相信第二个散列来自xades:SignedProperties
节点,它是ds:Object
的一部分
至少对象和引用中的id(xades-id-e34ff…
)相同
希望这能给你(和我)一个提示
问候,,
Sebastian从我读到的内容来看,我支持我前面描述的内容:它是节点SignedProperties
的散列。此散列是SignedInfo
节点的一部分,该节点随后会被签名。第一个链接是一个波兰语博客。这并不完美,但谷歌翻译做得相当不错,博客中的信息帮助我更清楚地理解
确保将节点规范化并base64\u编码
d
附言:哥斯达黎加电力设施实施委员会-D好的。但是我要寄什么文件来签字呢。在第一个示例中,我发送了整个XML。但是第二份呢?谢谢。我一弄明白就把答案贴出来。如果你也这样做,请这样做。
<ds:Signature Id="id-e34ffbff277e8d1432e864436aa11882" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference Id="r-id-1" Type="" URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
<ds:XPath>not(ancestor-or-self::ds:Signature)</ds:XPath>
</ds:Transform>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>ql0urtXTsc9W0GMIhTdzYHXnQYfnieoIttOBn9fGw7A=</ds:DigestValue>
</ds:Reference>
<ds:Reference Type="http://uri.etsi.org/01903#SignedProperties" URI="#xades-ide34ffbff277e8d1432e864436aa11882">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>5JVZPTwN5Lj0sGTfFzaUeMKCo/xbCAj7fw6TLUFtZIk=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue Id="value-ide34ffbff277e8d1432e864436aa11882">Mt1TUuPK3W8/0eRtJX5t45GV9bHvMjw....</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIFpTCCBI2gAwIBAgIKK+...</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
<ds:Object>
<xades:QualifyingProperties xmlns:xades="http://uri.etsi.org/01903/v1.3.2#" Target="#ide34ffbff277e8d1432e864436aa11882">
<xades:SignedProperties Id="xades-id-e34ffbff277e8d1432e864436aa11882">
<xades:SignedSignatureProperties>
<xades:SigningTime>2016-11-25T16:35:06Z</xades:SigningTime>
<xades:SigningCertificate>
<xades:Cert>
<xades:CertDigest>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>LoXZC86JwDL7zWC35qj7Q4AzrRQ=</ds:DigestValue>
</xades:CertDigest>
<xades:IssuerSerial>
<ds:X509IssuerName>CN=CA SINPE - PERSONA FISICA,OU=DIVISION DE SERVICIOS FINANCIEROS,O=BANCO CENTRAL DE COSTA RICA,C=CR,2.5.4.5=#130c342d3030302d303034303137</ds:X509IssuerName>
<ds:X509SerialNumber>207422209224813750547132</ds:X509SerialNumber>
</xades:IssuerSerial>
</xades:Cert>
</xades:SigningCertificate>
<xades:SignaturePolicyIdentifier>
<xades:SignaturePolicyId>
<xades:SigPolicyId>
<xades:Identifier>https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.1/Resolucion_Comprobantes_Electronicos_DGT-R-48-2016.pdf</xades:Identifier>
</xades:SigPolicyId>
<xades:SigPolicyHash>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>NmI5Njk1ZThkNzI0MmIzMGJmZDAyNDc4YjUwNzkzODM2NTBiOWUxNTBkMmI2YjgzYzZjM2I5NTZlNDQ4OWQzMQ==</ds:DigestValue>
</xades:SigPolicyHash>
</xades:SignaturePolicyId>
</xades:SignaturePolicyIdentifier>
</xades:SignedSignatureProperties>
<xades:SignedDataObjectProperties>
<xades:DataObjectFormat ObjectReference="#r-id-1">
<xades:MimeType>application/octet-stream</xades:MimeType>
</xades:DataObjectFormat>
</xades:SignedDataObjectProperties>
</xades:SignedProperties>
</xades:QualifyingProperties>
</ds:Object>
</ds:Signature>