Securing sockets with TLS/SSL
You have probably come across the discussion around secure web communication using
Secure Socket Layer (SSL), or more precisely
Transport Layer Security (TLS), which is adopted by many other high-level protocols. Let us see how we can wrap a plain sockets connection with SSL. Python has the built-in ssl
module, which serves this purpose.
In this example, we would like to create a plain TCP socket and connect to an HTTPS enabled web server. Then, we can wrap that connection using SSL and check the various properties of the connection. For example, to check the identity of the remote web server, we can see if the hostname is same in the SSL certificate as we expect it to be. The following is an example of a secure socket-based client:
import socket import ssl from ssl import wrap_socket, CERT_NONE, PROTOCOL_TLSv1, SSLError from ssl import SSLContext from ssl import HAS_SNI from pprint import pprint TARGET_HOST = 'www.google.com' SSL_PORT = 443 # Use the path...