1# -*- coding: latin-1 -*- 2# 3# Copyright (C) AB Strakt 4# Copyright (C) Jean-Paul Calderone 5# See LICENSE for details. 6 7""" 8Simple SSL client, using blocking I/O 9""" 10 11import os 12import socket 13import sys 14 15from OpenSSL import SSL, crypto 16 17 18def verify_cb(conn, cert, errnum, depth, ok): 19 certsubject = crypto.X509Name(cert.get_subject()) 20 commonname = certsubject.commonName 21 print('Got certificate: ' + commonname) 22 return ok 23 24 25if len(sys.argv) < 3: 26 print('Usage: python client.py HOST PORT') 27 sys.exit(1) 28 29 30dir = os.path.dirname(sys.argv[0]) 31if dir == '': 32 dir = os.curdir 33 34 35# Initialize context 36ctx = SSL.Context(SSL.SSLv23_METHOD) 37ctx.set_options(SSL.OP_NO_SSLv2) 38ctx.set_options(SSL.OP_NO_SSLv3) 39ctx.set_verify(SSL.VERIFY_PEER, verify_cb) # Demand a certificate 40ctx.use_privatekey_file(os.path.join(dir, 'client.pkey')) 41ctx.use_certificate_file(os.path.join(dir, 'client.cert')) 42ctx.load_verify_locations(os.path.join(dir, 'CA.cert')) 43 44# Set up client 45sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM)) 46sock.connect((sys.argv[1], int(sys.argv[2]))) 47 48while 1: 49 line = sys.stdin.readline() 50 if line == '': 51 break 52 try: 53 sock.send(line) 54 sys.stdout.write(sock.recv(1024).decode('utf-8')) 55 sys.stdout.flush() 56 except SSL.Error: 57 print('Connection died unexpectedly') 58 break 59 60 61sock.shutdown() 62sock.close() 63