tlslite.integration.tlssocketservermixin.TLSSocketServerMixIn

Package tlslite :: Package integration :: Module tlssocketservermixin :: Class TLSSocketServerMixIn |
[hide private]
[frames] | no frames]

# Class TLSSocketServerMixIn

source code

Known Subclasses:
  - xmlrpcserver.TLSXMLRPCServer

This class can be mixed in with any `SocketServer.TCPServer` to add TLS support.

To use this class, define a new class that inherits from it and some `SocketServer.TCPServer` (with the mix-in first). Then implement the handshake() method, doing some sort of server handshake on the connection argument. If the handshake method returns True, the RequestHandler will be triggered. Below is a complete example of a threaded HTTPS server:

       from SocketServer import *
       from BaseHTTPServer import *
       from SimpleHTTPServer import *
       from tlslite import *

       s = open("./serverX509Cert.pem").read()
       x509 = X509()
       x509.parse(s)
       certChain = X509CertChain([x509])

       s = open("./serverX509Key.pem").read()
       privateKey = parsePEMKey(s, private=True)

       sessionCache = SessionCache()

       class MyHTTPServer(ThreadingMixIn, TLSSocketServerMixIn,
                          HTTPServer):
         def handshake(self, tlsConnection):
             try:
                 tlsConnection.handshakeServer(certChain=certChain,
                                               privateKey=privateKey,
                                               sessionCache=sessionCache)
                 tlsConnection.ignoreAbruptClose = True
                 return True
             except TLSError, error:
                 print "Handshake failure:", str(error)
                 return False

       httpd = MyHTTPServer(('localhost', 443), SimpleHTTPRequestHandler)
       httpd.serve_forever()

Instance Methods | [hide private]
finish_request(self, sock, client_address) | source code
handshake(self, tlsConnection) | source code