blob: d4a751f756d6e5ef6a967ba0498806fd333b7c9e [file] [log] [blame]
Jean-Paul Calderone7fb6b212011-06-06 08:31:28 -04001# Copyright (C) Jean-Paul Calderone
2# See LICENSE for details.
3
Alex Gaynorca749b52019-02-10 17:23:19 -05004from __future__ import print_function
5
Jean-Paul Calderone7fb6b212011-06-06 08:31:28 -04006from sys import argv, stdout
7from socket import socket
8
9from OpenSSL.SSL import TLSv1_METHOD, Context, Connection
10
Hynek Schlawack8b7e4552016-03-13 07:51:09 +010011
Jean-Paul Calderone7fb6b212011-06-06 08:31:28 -040012def main():
13 """
14 Connect to an SNI-enabled server and request a specific hostname, specified
15 by argv[1], of it.
16 """
17 if len(argv) < 2:
Alex Gaynorca749b52019-02-10 17:23:19 -050018 print('Usage: %s <hostname>' % (argv[0],))
Jean-Paul Calderone7fb6b212011-06-06 08:31:28 -040019 return 1
20
21 client = socket()
22
Alex Gaynorca749b52019-02-10 17:23:19 -050023 print('Connecting...', end="")
Jean-Paul Calderone7fb6b212011-06-06 08:31:28 -040024 stdout.flush()
25 client.connect(('127.0.0.1', 8443))
Alex Gaynorca749b52019-02-10 17:23:19 -050026 print('connected', client.getpeername())
Jean-Paul Calderone7fb6b212011-06-06 08:31:28 -040027
28 client_ssl = Connection(Context(TLSv1_METHOD), client)
29 client_ssl.set_connect_state()
30 client_ssl.set_tlsext_host_name(argv[1])
31 client_ssl.do_handshake()
Alex Gaynorca749b52019-02-10 17:23:19 -050032 print('Server subject is', client_ssl.get_peer_certificate().get_subject())
Jean-Paul Calderone7fb6b212011-06-06 08:31:28 -040033 client_ssl.close()
34
Hynek Schlawack8b7e4552016-03-13 07:51:09 +010035
36if __name__ == '__main__':
37 import client
38 raise SystemExit(client.main())