Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Stabilire Handshake

Următorul exemplu de cod inițiază o strângere de mână TLS cu un server TLS (numele serverului trebuie specificat ca prim argument al liniei de comandă). Putem observa cum prima data este deschisa o conexiune TCP peste care urmeaza sa folosim protocolul TLS.

#!/usr/bin/python3
import socket, ssl, sys, pprint
# Primim ca argument hostname-ul serverului, de exemplu google.com
hostname = sys.argv[1]

port = 443

# Create TCP connection
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((hostname, port))
input("After making TCP connection. Press any key to continue ...")

# You may need to change this depending on your Linux distro
cadir = '/etc/ssl/certs'

# Set up the TLS context
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
#context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) # For Ubuntu 16.04
context.load_verify_locations(capath=cadir)
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True

# Add the TLS
ssock = context.wrap_socket(sock, server_hostname=hostname,
do_handshake_on_connect=False)
ssock.do_handshake() # Start the handshake
pprint.pprint(ssock.getpeercert())
input("After handshake. Press any key to continue ...")
# Close the TLS Connection

ssock.shutdown(socket.SHUT_RDWR)
ssock.close()

Exercitiu 1. Folosind condul precedent, stabiliti o conexiune catre google.com si raspundeti la urmatoarele intrebari:

  • Care este algoritmul de criptare folosit?
  • Ce reprezinta /etc/ssl/certs?
  • Afisati certificatul serverului.
  • Utilizați Wireshark pentru a captura traficul de rețea în timpul executării programului și explicați observațiile ce se intampla. În special, explicați care pas declanșează handshake-ul TCP, și care pas declanșează handshake-ul TLS. Explicați relația dintre cele doua handshake-uri.