Jean-Paul Calderone | 7fb6b21 | 2011-06-06 08:31:28 -0400 | [diff] [blame] | 1 | # Copyright (C) Jean-Paul Calderone |
| 2 | # See LICENSE for details. |
| 3 | |
Jean-Paul Calderone | 7fb6b21 | 2011-06-06 08:31:28 -0400 | [diff] [blame] | 4 | from sys import argv, stdout |
| 5 | from socket import socket |
| 6 | |
| 7 | from OpenSSL.SSL import TLSv1_METHOD, Context, Connection |
| 8 | |
Hynek Schlawack | 8b7e455 | 2016-03-13 07:51:09 +0100 | [diff] [blame] | 9 | |
Jean-Paul Calderone | 7fb6b21 | 2011-06-06 08:31:28 -0400 | [diff] [blame] | 10 | def main(): |
| 11 | """ |
| 12 | Connect to an SNI-enabled server and request a specific hostname, specified |
| 13 | by argv[1], of it. |
| 14 | """ |
| 15 | if len(argv) < 2: |
| 16 | print 'Usage: %s <hostname>' % (argv[0],) |
| 17 | return 1 |
| 18 | |
| 19 | client = socket() |
| 20 | |
| 21 | print 'Connecting...', |
| 22 | stdout.flush() |
| 23 | client.connect(('127.0.0.1', 8443)) |
| 24 | print 'connected', client.getpeername() |
| 25 | |
| 26 | client_ssl = Connection(Context(TLSv1_METHOD), client) |
| 27 | client_ssl.set_connect_state() |
| 28 | client_ssl.set_tlsext_host_name(argv[1]) |
| 29 | client_ssl.do_handshake() |
| 30 | print 'Server subject is', client_ssl.get_peer_certificate().get_subject() |
| 31 | client_ssl.close() |
| 32 | |
Hynek Schlawack | 8b7e455 | 2016-03-13 07:51:09 +0100 | [diff] [blame] | 33 | |
| 34 | if __name__ == '__main__': |
| 35 | import client |
| 36 | raise SystemExit(client.main()) |