[Python-Dev] More on server-side SSL support
Bill Janssen
janssen at parc.com
Mon Aug 20 21:33:28 CEST 2007
> I view TLS as a wrapper around / layer on top of TCP, and so I think the
> API should look like, as well.
I think Martin raises a valid point here, which should at least be
discussed more thoroughly. Should there be an "SSL socket", which is
just like a regular socket? Does that really provide any additional
functionality to anyone? Most apps and classes that use TCP sockets
wrap the socket with socket._fileobject() to get "read" and "write",
anyway -- can't they just wrap it with socket.ssl instead?
Perhaps in the sprint, I should just concentrate on widening the
"socket.ssl" interface a bit, and improving the functionality of the
SSLObject a bit.
Suggested improvements:
* Allow server-side operation.
* Allow specification of particular SSL protocol version.
* Allow certificate validation. This is a bit tricky; typically
certs are validated against some database of root certificates, so you
need a whole infrastructure to maintain that database. Currently, we
don't have one, so no certs can be validated. We could add a switch
to allow auto-validation of self-signed certs pretty easily. I could
add a parameter to the SSLObject constructor which would be a filepath
for a file full of root certs (see SSL_CTX_load_verify_locations(3ssl)).
* Add a method to retrieve the other side's certificate info. What's
a good format for the "notBefore" and "notAfter" dates? The simplest
thing to use is the string formatting OpenSSL provides, which is
always like "Sep 29 16:38:04 2006 GMT", which can easily be parsed
by the time.strptime() function if the user wants something else.
On the other hand, figuring out how to use strptime() is always a
pain, so providing a convenience function wouldn't be a terrible idea.
* Add a shutdown() method to stop using SSL on the underlying socket
without closing the socket.
* Make SSLObject conform to the Raw I/O API in PEP 3116. This one is
interesting; what should close() do? Close the underlying socket? Or
just do an SSL shutdown?
Bill
More information about the Python-Dev
mailing list