Dieses Projekt dient als Übung, um den Unterschied zwischen ungesicherter (TCP) und gesicherter (TLS) Client/Server-Kommunikation in Python zu demonstrieren.
- Python 3.x
- OpenSSL: Notwendig, um die selbstsignierten Zertifikate für den TLS-Test zu erstellen. (Auf Linux/macOS standardmäßig installiert, unter Windows muss es ggf. nachinstalliert werden).
Stellen Sie sicher, dass alle folgenden Dateien im selben Ordner liegen:
TODO
Bevor Sie die TLS-Skripte ausführen, benötigen Sie ein Server-Zertifikat (server.crt) und den zugehörigen privaten Schlüssel (server.key).
Führen Sie das mitgelieferte Bash-Skript aus:
chmod +x create_certs.sh # Skript ausführbar machen (falls nötig)
./create_certs.shDas Skript erstellt:
server.key: Der private Schlüssel des Servers.server.crt: Das selbstsignierte X.509-Zertifikat des Servers, gültig für "localhost".
Die Kommunikation erfolgt hier ohne Verschlüsselung oder Authentifizierung, direkt über reines TCP. Dies erfüllt die Anforderung 1 ("Daten vollständig übertragen") über Mechanismen wie Quittungen (ACKs) und Wiederholtes Senden (Retransmission).
Server starten (Terminal 1):
python server_no_tls.pyClient starten (Terminal 2):
python client_no_tls.pyErwartetes Ergebnis: Die Nachricht wird zwischen Client und Server ausgetauscht.
Hier wird TLS auf der Transportschicht implementiert, um die Anforderung 2 ("Daten sicher übertragen") durch Verschlüsselung, Integritätsschutz und Authentifizierung zu gewährleisten.
Server starten (Terminal 1):
python server_tls.pyClient starten (Terminal 2):
python client_tls.pyErwartetes Ergebnis:
Der Client stellt eine TCP-Verbindung her.
Der TLS-Handshake findet statt (unter Verwendung von server.crt und server.key).
Die Nachricht wird verschlüsselt ausgetauscht.
Wichtig: Der Client nutzt das server.crt, um dem Server zu vertrauen (da es selbstsigniert ist, wird es als temporäre Vertrauensquelle geladen: context.load_verify_locations("server.crt")).