[xmlsec] Transitioning custom XMLDSig verification implementation to xmlsec
Aleksey Sanin
aleksey at aleksey.com
Fri Jan 24 08:55:50 PST 2014
Hi Krzysztof,
Let me try to answer your questions one-by-one
* IO handlers
To handle the context, you can use a trick with thread local storage:
you can set your data in TLS before calling XMLSec, then use this
data in the context, and cleanup after XMLSec is done.
* additional certificate/key checks
You can also look at implementing a custom keys store
http://www.aleksey.com/xmlsec/api/xmlsec-keysmngr.html#XMLSECKEYSTOREKLASS
The findKey method is the one you need.
* registering transformation URIs
Easy one :)
http://www.aleksey.com/xmlsec/api/xmlsec-transforms.html#XMLSECTRANSFORMIDSREGISTER
Aleksey
On 1/24/14, 5:09 AM, Krzysztof Konopko wrote:
> Hi,
>
> I'd looked briefly at xmlsec a couple years back when my task involved
> XMLDSig verification. I couldn't find a way a couple of my use cases
> would be handled by xmlsec. So due to the time pressure and
> unfamiliarity with the subject I implemented the verification myself.
>
> Now when the implementation runs in a real product, I have a chance to
> revisit it and am looking at xmlsec again. Basically I'd like to
> replace my implementation with xmlsec.
>
> I'm having a closer look now, reading the API more carefully and digging
> in the source code. But it looks like I'm stuck with a couple of problems.
>
> What I need to do is to verify a file bundle (a ZIP archive) with
> XMLDSig file in it, having a `<Manifest>` with the list of
> `<Reference>`s (files in the archive) and their `<Digest>`s. And I want
> it to be verified without unzipping it onto disk (this is what my
> implementation does).
>
> When it's unzipped, it's easy. xmlsec simply handles all of it. Since
> the signature is created by Java XMLDSig implementation (I have no way
> to change it), there are few incompatibilities. One of them was white
> spaces removed before running C14N over the transformed part of the
> document. I worked it around by calling `xmlKeepBlanksDefault(0);`. Easy.
>
> So now I'm looking for any pointers for the problems listed below. I'm
> trying to work them out myself but maybe someone could save me some time
> and point me in the right direction.
>
> * IO handlers
>
> Reading the file with signatures from the archive seems easy. Just read
> it into memory from the ZIP archive and load the document from memory.
> But then I need to read the other files from the archive
> when `xmlSecDSigCtxVerify()` goes through each `<Reference>` in the
> `<Manifest>`.
>
> I'm a bit surprised that `xmlSecIORegisterCallbacks()` doesn't let to
> pass any user data (context). It's great that `xmlInputOpenCallback`
> returns whatever I like, but I need my context much earlier, in
> `xmlInputMatchCallback` and in `xmlInputOpenCallback` itself. In my
> case this would be a handle to an opened ZIP archive (or whatever
> related context) that would deal with all requests to find, open and
> read files from the ZIP archive without writing them onto disk.
>
> Is it reasonable to set `referencePreExecuteCallback` and replace the
> first transformation (reading a file from disk) with my own one (reading
> a file from the ZIP archive)? It looks like
> `xmlSecTransformCtxUriExecute()` always creates
> `xmlSecTransformInputURIId` so no chance to inject my own transformation
> there? Or am I missing something?
>
> * additional certificate/key checks
>
> I'm using OpenSSL and I need to add some product specific checks
> (policies and some other certificate rules) and then extract policies
> tree once verified. This all is pretty much achieved with setting
> verification params and getting some information from the verification
> context.
>
> With my own implementation this is pretty much obvious while xmlsec
> doesn't seem to expose neither `X509_VERIFY_PARAM` nor `X509_STORE_CTX`.
> Am I right? So probably I'm better off with
> `XMLSEC_KEYINFO_FLAGS_X509DATA_DONT_VERIFY_CERTS` and running
> certificate chain verification myself?
>
> * registering transformation URIs
>
> I've got a bunch of legacy transformation URIs
> like http://www.w3.org/TR/xmldsig-core#rsa-sha1. How do I associate
> them with existing transformations in xmlsec?
>
> --
>
> Apologies for this being a bit longish. I hope it all makes sense and
> you're able at least suggest me "this is not possible, sorry", or "check
> this or that". Any suggestions are more than welcome.
>
> Cheers,
> Kris
>
>
> _______________________________________________
> xmlsec mailing list
> xmlsec at aleksey.com
> http://www.aleksey.com/mailman/listinfo/xmlsec
>
More information about the xmlsec
mailing list