summaryrefslogtreecommitdiff
path: root/demo/ssl/echod_lib.py
diff options
context:
space:
mode:
Diffstat (limited to 'demo/ssl/echod_lib.py')
-rw-r--r--demo/ssl/echod_lib.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/demo/ssl/echod_lib.py b/demo/ssl/echod_lib.py
new file mode 100644
index 0000000..7bea683
--- /dev/null
+++ b/demo/ssl/echod_lib.py
@@ -0,0 +1,45 @@
+"""Support routines for the various SSL 'echo' servers.
+
+Copyright (c) 1999-2003 Ng Pheng Siong. All rights reserved."""
+
+import SocketServer
+from M2Crypto import SSL
+
+def init_context(protocol, certfile, cafile, verify, verify_depth=10):
+ ctx = SSL.Context(protocol)
+ ctx.load_cert_chain(certfile)
+ ctx.load_verify_locations(cafile)
+ ctx.set_client_CA_list_from_file(cafile)
+ ctx.set_verify(verify, verify_depth)
+ #ctx.set_allow_unknown_ca(1)
+ ctx.set_session_id_ctx('echod')
+ ctx.set_info_callback()
+ return ctx
+
+
+class ssl_echo_handler(SocketServer.BaseRequestHandler):
+
+ buffer = 'Ye Olde Echo Servre\r\n'
+
+ def handle(self):
+ peer = self.request.get_peer_cert()
+ if peer is not None:
+ print 'Client CA =', peer.get_issuer().O
+ print 'Client Subject =', peer.get_subject().CN
+ x = self.request.write(self.buffer)
+ while 1:
+ try:
+ buf = self.request.read()
+ if not buf:
+ break
+ self.request.write(buf)
+ except SSL.SSLError, what:
+ if str(what) == 'unexpected eof':
+ break
+ else:
+ raise
+
+ def finish(self):
+ self.request.close()
+
+