[xmlsec] Signing and verifying a XAdES template

G. Ken Holman gkholman at CraneSoftwrights.com
Sat Nov 3 11:13:43 PDT 2012


At 2012-11-03 15:07 +0100, Alfredo Esteban wrote:
>Hello,
>
>I was verifying whether xmlsec supports XAdES signature (Does it?). As
>you probably know, XAdES is an European extension of XMLsign.
>
>I'm able to sign the attached XAdES template without errors but
>xmlsec1 is not able to verify its own resulting signature:
>
> > xmlsec1 --version
>xmlsec1 1.2.18 (openssl)
>
> > xmlsec1 sign --pkcs12 ../../certificado-ceres-alfredo-esteban.p12 
> --output hola.xsig --pwd xxxxxxxxxxxxx ejemplo-xades-enveloped.xml
>
> > xmlsec1 verify --trusted-der aet-cert.der 
> ejemplo-xades-enveloped.xsig 
> func=xmlSecOpenSSLEvpDigestVerify:file=digests.c:line=229:obj=sha1:subj=unknown:error=12:invalid 
> data:data and digest do not match
>FAIL
>SignedInfo References (ok/all): 1/2
>Manifests References (ok/all): 0/0
>Error: failed to verify file "ejemplo-xades-enveloped.xsig"
>
>Is it a bug? Any help is welcome.

I think not.  I think it is an issue with your signature.

I designed the XML scaffolding for OASIS UBL documents and I'm told 
there are a number of users of XAdES in Europe who are signing UBL 
documents using it.  An example is found here, and you can see a 
couple of XAdES fields under the ds:Object element:

  http://docs.oasis-open.org/ubl/prd2-UBL-2.1/xml/UBL-Invoice-2.0-Enveloped.xml

I used xmlsec to sign and validate this document.  The environment 
that I publish to sign and to validate UBL documents can be found here:

  http://www.CraneSoftwrights.com/resources/ubl/#digsig

Looking at the example UBL Invoice cited above, comparing it to the 
document you attached to your post, I note that the UBL document has 
a <ds:Transform> element that tells the processor to ignore 
everything under <sig:UBLDocumentSignatures> when calculating the 
signature.  Thus, when the signature information is added by the 
signing process under the <sig:UBLDocumentSignatures> element, that 
added information does not change what is calculated to determine the 
signature information at validation time.

If I've interpreted your situation correctly, the process that is 
calculating the signature for your XML is signing the entire 
document, and then you go and change what is signed by adding the 
signature information to the document without protecting it.  When 
the signature validation process acts on your document, it now 
contains the signature information which gets incorporated in the 
calculations and will never be correct.

If, however, you included a <ds:Transform> element in your document 
in order to protect the signing process from incorporating the added 
signature, then the validation process will ignore the added 
signature and come to the same calculations as the signing process.

At least that is what I think is going on.

I hope this helps.

. . . . . . . . . Ken


--
Contact us for world-wide XML consulting and instructor-led training
Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm
Crane Softwrights Ltd.            http://www.CraneSoftwrights.com/z/
G. Ken Holman                   mailto:gkholman at CraneSoftwrights.com
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal



More information about the xmlsec mailing list