diff options
-rw-r--r-- | examples/simple/README | 3 | ||||
-rw-r--r-- | examples/simple/client.py | 62 | ||||
-rw-r--r-- | examples/simple/server.py | 119 |
3 files changed, 0 insertions, 184 deletions
diff --git a/examples/simple/README b/examples/simple/README deleted file mode 100644 index a072998..0000000 --- a/examples/simple/README +++ /dev/null @@ -1,3 +0,0 @@ -To use this example, first generate keys and certificates for both the -client and the server. You can do this with the script in the directory -above this one, mk_simple_certs.py. diff --git a/examples/simple/client.py b/examples/simple/client.py deleted file mode 100644 index 5662122..0000000 --- a/examples/simple/client.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: latin-1 -*- -# -# Copyright (C) AB Strakt -# Copyright (C) Jean-Paul Calderone -# See LICENSE for details. - -""" -Simple SSL client, using blocking I/O -""" - -import os -import socket -import sys - -from OpenSSL import SSL, crypto - - -def verify_cb(conn, cert, errnum, depth, ok): - certsubject = crypto.X509Name(cert.get_subject()) - commonname = certsubject.commonName - print('Got certificate: ' + commonname) - return ok - - -if len(sys.argv) < 3: - print('Usage: python client.py HOST PORT') - sys.exit(1) - - -dir = os.path.dirname(sys.argv[0]) -if dir == '': - dir = os.curdir - - -# Initialize context -ctx = SSL.Context(SSL.SSLv23_METHOD) -ctx.set_options(SSL.OP_NO_SSLv2) -ctx.set_options(SSL.OP_NO_SSLv3) -ctx.set_verify(SSL.VERIFY_PEER, verify_cb) # Demand a certificate -ctx.use_privatekey_file(os.path.join(dir, 'client.pkey')) -ctx.use_certificate_file(os.path.join(dir, 'client.cert')) -ctx.load_verify_locations(os.path.join(dir, 'CA.cert')) - -# Set up client -sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM)) -sock.connect((sys.argv[1], int(sys.argv[2]))) - -while 1: - line = sys.stdin.readline() - if line == '': - break - try: - sock.send(line) - sys.stdout.write(sock.recv(1024).decode('utf-8')) - sys.stdout.flush() - except SSL.Error: - print('Connection died unexpectedly') - break - - -sock.shutdown() -sock.close() diff --git a/examples/simple/server.py b/examples/simple/server.py deleted file mode 100644 index d25feb1..0000000 --- a/examples/simple/server.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: latin-1 -*- -# -# Copyright (C) AB Strakt -# Copyright (C) Jean-Paul Calderone -# See LICENSE for details. - -""" -Simple echo server, using nonblocking I/O -""" - -from __future__ import print_function - -import os -import select -import socket -import sys - -from OpenSSL import SSL, crypto - - -def verify_cb(conn, cert, errnum, depth, ok): - certsubject = crypto.X509Name(cert.get_subject()) - commonname = certsubject.commonName - print('Got certificate: ' + commonname) - return ok - - -if len(sys.argv) < 2: - print('Usage: python server.py PORT') - sys.exit(1) - -dir = os.path.dirname(sys.argv[0]) -if dir == '': - dir = os.curdir - -# Initialize context -ctx = SSL.Context(SSL.SSLv23_METHOD) -ctx.set_options(SSL.OP_NO_SSLv2) -ctx.set_options(SSL.OP_NO_SSLv3) -ctx.set_verify( - SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_cb -) # Demand a certificate -ctx.use_privatekey_file(os.path.join(dir, 'server.pkey')) -ctx.use_certificate_file(os.path.join(dir, 'server.cert')) -ctx.load_verify_locations(os.path.join(dir, 'CA.cert')) - -# Set up server -server = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM)) -server.bind(('', int(sys.argv[1]))) -server.listen(3) -server.setblocking(0) - -clients = {} -writers = {} - - -def dropClient(cli, errors=None): - if errors: - print('Client %s left unexpectedly:' % (clients[cli],)) - print(' ', errors) - else: - print('Client %s left politely' % (clients[cli],)) - del clients[cli] - if cli in writers: - del writers[cli] - if not errors: - cli.shutdown() - cli.close() - - -while 1: - try: - r, w, _ = select.select( - [server] + list(clients.keys()), list(writers.keys()), [] - ) - except Exception: - break - - for cli in r: - if cli == server: - cli, addr = server.accept() - print('Connection from %s' % (addr,)) - clients[cli] = addr - - else: - try: - ret = cli.recv(1024).decode('utf-8') - except (SSL.WantReadError, - SSL.WantWriteError, - SSL.WantX509LookupError): - pass - except SSL.ZeroReturnError: - dropClient(cli) - except SSL.Error as errors: - dropClient(cli, errors) - else: - if cli not in writers: - writers[cli] = '' - writers[cli] = writers[cli] + ret - - for cli in w: - try: - ret = cli.send(writers[cli]) - except (SSL.WantReadError, - SSL.WantWriteError, - SSL.WantX509LookupError): - pass - except SSL.ZeroReturnError: - dropClient(cli) - except SSL.Error as errors: - dropClient(cli, errors) - else: - writers[cli] = writers[cli][ret:] - if writers[cli] == '': - del writers[cli] - -for cli in clients.keys(): - cli.close() -server.close() |