OLD | NEW |
| (Empty) |
1 """TLS Lite + SocketServer.""" | |
2 | |
3 from tlslite.TLSConnection import TLSConnection | |
4 | |
5 class TLSSocketServerMixIn: | |
6 """ | |
7 This class can be mixed in with any L{SocketServer.TCPServer} to | |
8 add TLS support. | |
9 | |
10 To use this class, define a new class that inherits from it and | |
11 some L{SocketServer.TCPServer} (with the mix-in first). Then | |
12 implement the handshake() method, doing some sort of server | |
13 handshake on the connection argument. If the handshake method | |
14 returns True, the RequestHandler will be triggered. Below is a | |
15 complete example of a threaded HTTPS server:: | |
16 | |
17 from SocketServer import * | |
18 from BaseHTTPServer import * | |
19 from SimpleHTTPServer import * | |
20 from tlslite.api import * | |
21 | |
22 s = open("./serverX509Cert.pem").read() | |
23 x509 = X509() | |
24 x509.parse(s) | |
25 certChain = X509CertChain([x509]) | |
26 | |
27 s = open("./serverX509Key.pem").read() | |
28 privateKey = parsePEMKey(s, private=True) | |
29 | |
30 sessionCache = SessionCache() | |
31 | |
32 class MyHTTPServer(ThreadingMixIn, TLSSocketServerMixIn, | |
33 HTTPServer): | |
34 def handshake(self, tlsConnection): | |
35 try: | |
36 tlsConnection.handshakeServer(certChain=certChain, | |
37 privateKey=privateKey, | |
38 sessionCache=sessionCache) | |
39 tlsConnection.ignoreAbruptClose = True | |
40 return True | |
41 except TLSError, error: | |
42 print "Handshake failure:", str(error) | |
43 return False | |
44 | |
45 httpd = MyHTTPServer(('localhost', 443), SimpleHTTPRequestHandler) | |
46 httpd.serve_forever() | |
47 """ | |
48 | |
49 | |
50 def finish_request(self, sock, client_address): | |
51 tlsConnection = TLSConnection(sock) | |
52 if self.handshake(tlsConnection) == True: | |
53 self.RequestHandlerClass(tlsConnection, client_address, self) | |
54 tlsConnection.close() | |
55 | |
56 #Implement this method to do some form of handshaking. Return True | |
57 #if the handshake finishes properly and the request is authorized. | |
58 def handshake(self, tlsConnection): | |
59 raise NotImplementedError() | |
OLD | NEW |