Learning Python Network Programming

(Sean Pound) #1

Programming with Sockets


server_socket.bind(('', SSL_SERVER_PORT))
server_socket.listen(5)
print("Waiting for ssl client on port %s" %SSL_SERVER_PORT)
newsocket, fromaddr = server_socket.accept()
# Generate your server's public certificate and private key
pairs.
ssl_conn = ssl.wrap_socket(newsocket, server_side=True,
certfile="server.crt", keyfile="server.key",
ssl_version=ssl.PROTOCOL_TLSv1)
print(ssl_conn.read())
ssl_conn.write('200 OK\r\n\r\n'.encode())
print("Served ssl client. Exiting...")
ssl_conn.close()
server_socket.close()

As you can see, the server socket is wrapped with the wrap_socket() method,
which uses some intuitive parameters such as certfile, keyfile, and SSL version
number. You can easily generate the certificate by following any step-by-step guide
found on the Internet. For example, http://www.akadia.com/services/sshtest
certificate.html suggests to generate the SSL certificate in a few steps.


Now, let's make a simplified version of a SSL client to talk with the above SSL server.
The following code snippet shows an example of a simple SSL client:


from socket import socket
import ssl

from pprint import pprint

TARGET_HOST ='localhost'
TARGET_PORT = 8000
CA_CERT_PATH = 'server.crt'

if __name__ == '__main__':

sock = socket()
ssl_conn = ssl.wrap_socket(sock, cert_reqs=ssl.CERT_REQUIRED,
ssl_version=ssl.PROTOCOL_TLSv1, ca_certs=CA_CERT_PATH)
target_host = TARGET_HOST
target_port = TARGET_PORT
ssl_conn.connect((target_host, int(target_port)))
Free download pdf