diff --git a/communicationScripts/client.py b/communicationScripts/client.py index 17ce07befc1370a028fc802ca4accdd8f747bc33..77b6e60e5e52acfff2dac11fb019fc82ef6b3f0d 100644 --- a/communicationScripts/client.py +++ b/communicationScripts/client.py @@ -1,10 +1,15 @@ import os import socket import wolfssl +from datetime import datetime + +def log(message): + print(f"[{datetime.now()}] {message}") def run_client(file_path): # CA-Zertifikat laden ca_cert = "../certificates/ca-cert.pem" + log("CA-Zertifikat wird geladen...") # Optionen für Verschlüsselungsalgorithmen print("Wählen Sie einen Verschlüsselungsalgorithmus:") @@ -25,32 +30,39 @@ def run_client(file_path): elif choice_cipher == "4": cipher_suite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA" # 3DES (unsicher) else: - print("Ungültige Auswahl, Standard-AES 128 GCM wird verwendet.") + log("Ungültige Auswahl, Standard-AES 128 GCM wird verwendet.") cipher_suite = "TLS_AES_128_GCM_SHA256" + log(f"Gewählte Cipher Suite: {cipher_suite}") + # SSL-Kontext erstellen + log("SSL-Kontext wird erstellt...") context = wolfssl.SSLContext(wolfssl.PROTOCOL_TLSv1_2) context.load_verify_locations(ca_cert) try: - # Verschlüsselung (Cipher Suite) setzen context.set_ciphers(cipher_suite) - print(f"Cipher Suite '{cipher_suite}' erfolgreich gesetzt!") + log(f"Cipher Suite '{cipher_suite}' erfolgreich gesetzt.") except Exception as e: - print(f"Fehler beim Setzen der Cipher Suite: {e}") - print("Möglicherweise wird die angegebene Cipher Suite von wolfSSL nicht unterstützt.") + log(f"Fehler beim Setzen der Cipher Suite: {e}") + log("Möglicherweise wird die angegebene Cipher Suite von wolfSSL nicht unterstützt.") return # Sichere Verbindung mit dem Server herstellen - with socket.create_connection(("192.168.125.101", 5000)) as sock: - with context.wrap_socket(sock, server_hostname="server") as ssl_sock: - print("Mit dem Server verbunden!") + try: + log("Verbindung zum Server wird aufgebaut...") + with socket.create_connection(("192.168.125.101", 5000)) as sock: + with context.wrap_socket(sock, server_hostname="server") as ssl_sock: + log("Mit dem Server verbunden!") - # Datei senden - with open(file_path, "rb") as f: - while chunk := f.read(1024): - ssl_sock.sendall(chunk) - print(f"Datei '{file_path}' erfolgreich an den Server gesendet.") + # Datei senden + log(f"Datei '{file_path}' wird gesendet...") + with open(file_path, "rb") as f: + while chunk := f.read(1024): + ssl_sock.sendall(chunk) + log(f"Datei '{file_path}' erfolgreich an den Server gesendet.") + except Exception as e: + log(f"Fehler bei der Kommunikation mit dem Server: {e}") if __name__ == "__main__": # Dateipfad der zu übertragenden Datei @@ -58,6 +70,6 @@ if __name__ == "__main__": # Stelle sicher, dass die Datei existiert if not os.path.exists(file_to_send): - print(f"Die Datei '{file_to_send}' wurde nicht gefunden!") + log(f"Die Datei '{file_to_send}' wurde nicht gefunden!") else: run_client(file_to_send) diff --git a/communicationScripts/server.py b/communicationScripts/server.py index b85d0840a8067be73554bfbe6be7efc22d7c81b0..7fe07336d9820b73ae2fb5c0ede58f6672d5e7b3 100644 --- a/communicationScripts/server.py +++ b/communicationScripts/server.py @@ -1,11 +1,17 @@ import socket import wolfssl +from datetime import datetime + +def log(message): + print(f"[{datetime.now()}] {message}") def run_server(): # Server-Zertifikat und Schlüssel cert_file = "../certificates/server-cert.pem" key_file = "../certificates/server-key.pem" + log("Server-Zertifikat und Schlüssel werden geladen...") + # Optionen für Verschlüsselungsalgorithmen print("Wählen Sie einen Verschlüsselungsalgorithmus:") print("1: AES 128 GCM (sicher)") @@ -24,44 +30,53 @@ def run_server(): elif choice_cipher == "4": cipher_suite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA" # 3DES (unsicher) else: - print("Ungültige Auswahl, Standard-AES 128 GCM wird verwendet.") + log("Ungültige Auswahl, Standard-AES 128 GCM wird verwendet.") cipher_suite = "TLS_AES_128_GCM_SHA256" - # SSL-Kontext erstellen (Standard: TLSv1.2, da keine Auswahl mehr) + log(f"Gewählte Cipher Suite: {cipher_suite}") + + # SSL-Kontext erstellen + log("SSL-Kontext wird erstellt...") context = wolfssl.SSLContext(wolfssl.PROTOCOL_TLSv1_2) context.load_cert_chain(certfile=cert_file, keyfile=key_file) - # Verschlüsselung (Cipher Suite) setzen - context.set_ciphers(cipher_suite) + try: + context.set_ciphers(cipher_suite) + log(f"Cipher Suite '{cipher_suite}' erfolgreich gesetzt.") + except Exception as e: + log(f"Fehler beim Setzen der Cipher Suite: {e}") + return # Server-Socket erstellen with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: sock.bind(("0.0.0.0", 5000)) # Auf allen Schnittstellen lauschen sock.listen(5) - print(f"Server läuft auf Port 5000 mit Cipher Suite: {cipher_suite}...") + log(f"Server läuft auf Port 5000 mit Cipher Suite: {cipher_suite}...") while True: - # Verbindung akzeptieren + log("Warten auf eingehende Verbindungen...") client_sock, addr = sock.accept() - print(f"Verbindung akzeptiert von {addr}!") + log(f"Verbindung akzeptiert von {addr}!") try: - # SSL/TLS-Schicht hinzufügen ssl_sock = context.wrap_socket(client_sock, server_side=True) + log("SSL/TLS-Verbindung mit Client hergestellt.") # Datei empfangen + log("Empfang der Datei wird gestartet...") with open("received_file.txt", "wb") as f: while True: data = ssl_sock.recv(1024) if not data: break f.write(data) - print("Datei erfolgreich empfangen und gespeichert als 'received_file.txt'") + log("Datei erfolgreich empfangen und gespeichert als 'received_file.txt'") except Exception as e: - print(f"Fehler bei der Verarbeitung der Verbindung: {e}") + log(f"Fehler bei der Verarbeitung der Verbindung: {e}") finally: - ssl_sock.close() # SSL-Socket explizit schließen - client_sock.close() # Basis-Socket explizit schließen + ssl_sock.close() + client_sock.close() + log("Verbindung geschlossen.") if __name__ == "__main__": run_server()