Re: Are verify callbacks global in M2Crypto?
Aaron Spike <[email protected]> Sat, 1 Nov 2008 11:10:40 -0500
| Newsgroups | gmane.comp.python.cryptography |
|---|---|
| Message-ID | <[email protected]> |
On Sat, Nov 1, 2008 at 2:00 AM, Heikki Toivonen <[email protected]> wrote: > > Aaron C Spike wrote: > > Using M2Crypto 0.18.2 on Ubuntu Hardy Heron, it seems that the callbacks > > passed to Context.set_verify() are shared between Contexts and therefore > > only a single callback is used. I've created a test case to illustrate > > Yes, this is correct. There is an old bug on this issue: > https://bugzilla.osafoundation.org/show_bug.cgi?id=3125 Thanks for pointing that out. Sorry I missed it. I think the arguments presented in the bug report are convincing. Perhaps if this behavior can't be corrected it could simply be documented more clearly in the API docs. > > In the above example cb1.counter remains 0. My goal is to serve requests > > on two sockets with different requirements for the clients which connect > > to each. While this example is seen from the client perspective I > > experience the same behavior on the server. I would appreciate advice on > > how I can correct my code to function as I expect. > > The question I have is: do you really need different contexts to have > different verify callback functions? This whole SSL thing is pretty new to me, so I apologize if I don't follow all of your logic. From my understanding of the API the ratio of verify callbacks to ssl contexts is 1:1. If that is true, wouldn't I need different contexts to have different verify callback functions? > I would assume most applications need just a single verify callback. > After all, in what situations would you want to change certificate > verification? It isn't that I want to change certificate verification during execution. I want verification to be different for each socket. I would like to provide two xmlrpc services. Some clients will be authorized to connect to one service; others will be authorized to connect to the other service. I planned to do this authorization check with the verify callback by checking the cert that the clients present against a predetermined list of acceptable certs for each service. Perhaps there is a better way to accomplish this goal? > The post connection check where you'll check the certificate hostname > matches peer's address can be done after certificate validation, so this > does not need a connection specific verification function. Where can I look for an example of this? I suppose I could follow the same process to check that the presented cert is in the list of acceptable certs. > The verification callback can carry connection specific information, and > people did this with the old style verification callbacks. This is now > deprecated (although it still works). AFAIK it should be possible to do > this with the new style callbacks as well, but I run into some problems > in trying to implement this for Python. Unfortunately I don't remember > the exact issues. I just remember I saw how to do it in C, but couldn't > figure out a good way to implement that for M2Crypto. I'm not sure I understand how connection specific information can flow through the new style callbacks. Do you know how any of the other OpenSSL wrappers for python handle this issue? Aaron Spike