Skip to content

Commit

Permalink
Added: SSL Server base
Browse files Browse the repository at this point in the history
  • Loading branch information
sepalani committed Apr 5, 2015
1 parent 2fa88c1 commit db46146
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*.crt
*.key
*.pyc
Empty file added tcp/README.md
Empty file.
41 changes: 41 additions & 0 deletions tcp/p8200/server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#! /usr/bin/python

import sys
sys.path.append("../..")

from utils.MHTriSSLServer import *
import SocketServer


class MHTriP8200RequestHandler(SocketServer.StreamRequestHandler):
"""Request Handler class for MHTri.
Focus on port 8200 requests.
"""
def handle(self):
for i in range(1):
# Error 11602: Connection failed / Wrong pass phrase? / Server is running?
# Error 11609: Connection closed unexpectedly
# Error 11612: Wrong data sent
# Error 11619: Timeout
print("[Server] Handle client")
head = chr(0) * 8
data = raw_input("$>")
self.wfile.write(head + data)
print(">>> %s" % (head + data))
print("<<< %s" % self.rfile.read())
print("[Server] Finish client")


if __name__ == "__main__":
HOST, PORT = '', 8200
server = MHTriSSLServer((HOST, PORT), MHTriP8200RequestHandler)

# Put the path of your private key/certificate
server.__ssl__(certfile='../../../server.crt', keyfile='../../../server.key')
try:
print("Server: %s | Port: %d" % (server.server_address[0], server.server_address[1]))
server.serve_forever()
except KeyboardInterrupt:
print("[Server] Closing...")
server.server_close()
29 changes: 29 additions & 0 deletions utils/MHTriSSLServer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import ssl
import SocketServer


class MHTriSSLServer(SocketServer.TCPServer):
"""Generic SSL Server class for MHTri.
Private key, certificate need to be generated in order for this server to work.
"""

ssl_default = {
'ssl_version': ssl.PROTOCOL_SSLv23,
'keyfile': 'server.key',
'certfile': 'server.crt',
'server_side': True
}

def __init__(self, server_address, RequestHandlerClass, bind_and_activate=True, **kwargs):
"""Constructor. May be extended, do not override."""
SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass, bind_and_activate)
if len(kwargs) > 0:
self.__ssl__(**kwargs)

def __ssl__(self, **kwargs):
"""Setup an SSL connection. See ssl.wrap_socket documentation for the parameters."""
for k in self.ssl_default:
if k not in kwargs:
kwargs[k] = self.ssl_default[k]
self.socket = ssl.wrap_socket(self.socket, **kwargs)
Empty file added utils/README.md
Empty file.
Empty file added utils/__init__.py
Empty file.

0 comments on commit db46146

Please sign in to comment.