~nchohan/appscale/zk3.3.4

« back to all changes in this revision

Viewing changes to AppDB/sslserverexample.py

  • Committer: Navraj Chohan
  • Date: 2009-03-28 01:14:04 UTC
  • Revision ID: nchohan@cs.ucsb.edu-20090328011404-42m1w6yt60m6yfg3
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
'''
 
2
SimpleSecureHTTPServer.py - simple HTTP server supporting SSL.
 
3
 
 
4
- replace fpem with the location of your .pem server file.
 
5
- the default port is 443.
 
6
 
 
7
usage: python SimpleSecureHTTPServer.py
 
8
see LICENSE file
 
9
'''
 
10
import socket, os
 
11
from SocketServer import BaseServer
 
12
from BaseHTTPServer import HTTPServer
 
13
from SimpleHTTPServer import SimpleHTTPRequestHandler
 
14
from OpenSSL import SSL
 
15
 
 
16
 
 
17
class SecureHTTPServer(HTTPServer):
 
18
    def __init__(self, server_address, HandlerClass):
 
19
        BaseServer.__init__(self, server_address, HandlerClass)
 
20
        ctx = SSL.Context(SSL.SSLv23_METHOD)
 
21
        #server.pem's location (containing the server private key and
 
22
        #the server certificate).
 
23
        fpem = '/home/cgb/appengine/hypertable/SSL/server.pem'
 
24
        ctx.use_privatekey_file (fpem)
 
25
        ctx.use_certificate_file(fpem)
 
26
        self.socket = SSL.Connection(ctx, socket.socket(self.address_family,
 
27
                                                        self.socket_type))
 
28
        self.server_bind()
 
29
        self.server_activate()
 
30
 
 
31
 
 
32
class SecureHTTPRequestHandler(SimpleHTTPRequestHandler):
 
33
    def setup(self):
 
34
        self.connection = self.request
 
35
        self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
 
36
        self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
 
37
 
 
38
 
 
39
def test(HandlerClass = SecureHTTPRequestHandler,
 
40
         ServerClass = SecureHTTPServer):
 
41
    server_address = ('', 443) # (address, port)
 
42
    httpd = ServerClass(server_address, HandlerClass)
 
43
    sa = httpd.socket.getsockname()
 
44
    print "Serving HTTPS on", sa[0], "port", sa[1], "..."
 
45
    httpd.serve_forever()
 
46
 
 
47
 
 
48
if __name__ == '__main__':
 
49
    test()
 
50