20.4.2024 (zuletzt aktualisiert am 25.4.2024)
Beschreibung der Konfiguration für eine Verschlüsselung mit TLS, SRTP und SARV von Telefonverbindungen unter Verwendung des kostenlosen SIP-Softphones PhonerLite für Windows und einem Asterisk-Telefon-Server, der dazu ebenfalls zu konfigurieren ist.
Die Verschlüsselung gelang mit TSL, SRTP und SAVP. Leider fand ich keine Bestätigung darüber, ob die Telefonverbindungen auch dank ZRTP mit einer Ende-zu-Ende-Verschlüsselung funktioniert, den die verwendete Telefonsoftware Asterisk für den Provider kann ZRTP leider nicht verarbeiten. SRTP kann jedoch den Audio-Stream nur zwischen dem Endgerät und dem Telefon-Server verschlüsseln, womit der Server als Angriffspunkt erhalten bleibt. Für Asterisk aus der Anfangszeit gab es unter
http://zfoneproject.com/docs/asterisk/man/html/u_guide.html
eine Erweiterung für ZRTP, die allerdings veraltet ist und nicht stabil lief. Leider kann wie bereits erwähnt mein Asterisk-Server kein ZRTP verarbeiten, weshalb die Verschlüsselung nur über SRTP zwischen dem Endgerät (hier PhonerLite) und dem Asterisk-Server funktioniert.
Eine Ende-zu-Ende-Verschlüsselung ist mir jedoch mit PhonerLite und dem kostenlosen SIP-Provider AntiSip gelungen. Darüber gibt es einen eigenen Artikel mit einer kochbuchartigen Anleitung:
Ende-zu-Ende-Verschlüsselung von Telefonaten mit PhonerLite und AntiSip – 24.4.2024: Telefonate mit vollständiger Ende-zu-Ende-Verschlüsselung gelingen mit den Softphones PhonerLite über den kostenlosen SIP-Provider AntiSip. Der Telefonprovider kann durch diese Verschlüsselungstechnik mit Hilfe von ZRTP, SRTP und TLS in Verbindung mit SNI das Gespräch nicht abhören. Neben einer kochbuchartigen Anleitung versucht der Artikel die Abkürzungen zu erklären. – weiter – |
Die meisten SIP-Softphones und IP-Telefon ermöglichen leider keine Ende-zu-Ende-Verschlüsselung. Nach der Gesetzeslage in Deutschland dürfen die Telekommunikationsprovider diesen Dienst nicht vorkonfiguriert anbieten. Laut
https://de.wikipedia.org/wiki/Secure_Real-Time_Transport_Protocol
gilt: „Eine Ende-zu-Ende-Verschlüsselung muss aufgrund der Gesetzeslage in den entsprechenden Ländern durch die Gesprächspartner selbst eingerichtet werden, da Telekommunikationsanbieter gesetzlich verpflichtet sind, Behörden auf gerichtliche Anordnung hin den Zugriff auf Gespräche zu ermöglichen. Daher dürfen beispielsweise Provider, die dem deutschen Telekommunikationsgesetz unterliegen, keine automatische Ende-zu-Ende-Verschlüsselung ermöglichen. Es ist jedoch in verschiedenen Ländern in der Regel nicht verboten, selbst für eine durchgehende Verschlüsselung zu sorgen. Dazu müssen die Endgeräte auf beiden Seiten entsprechend ausgestattet sein. In der Regel kommt dann auch SRTP zum Einsatz, es wird jedoch durch ein anderes Protokoll gesteuert, zum Beispiel durch ZRTP.“
Eine kurze Zusammenfassung der Problematik und der Erklärung der Fachbegriffe bietet der Autor des Softphones PhonerLite auf
https://forum.phoner.de/cgi-bin/yabb2/YaBB.pl?num=1286528780.
Grundsätzlich sind Transportprotokolle nur dazu da, die Gespräche zwischen den Endgeräten (Telefonen aller Art) zu vermitteln. Die bekanntesten Transportprotokolle sind SIP und IAX2. Die Audiostreams – also die Sprachübertragung und ihre verschiedenen Audio-Codecs – haben mit den Transportprotokollen nichts zu tun. Es sind umgangssprachlich gesagt zwei Paar Stiefel.
Erklärung der Begriffe:
-
- TLS (Transport Layer Security): Ein Sicherheitsprotokoll, das die Kommunikation zwischen Servern und Clients verschlüsselt, um die Vertraulichkeit und Integrität der Transportdaten, wie z.B. SIP-Signalisierung, zu gewährleisten. Es verwendet Zertifikate, um die Identität der Kommunikationspartner zu authentifizieren.
- Zertifikate: Digitale Identitäten, die von Zertifizierungsstellen ausgestellt werden und die öffentlichen Schlüssel der Kommunikationspartner enthalten. Sie werden verwendet, um die Authentizität der Kommunikationspartner zu überprüfen und die TLS-Verbindung zu etablieren.
- SRTP (Secure Real-time Transport Protocol): Ein Sicherheitsprotokoll, das die Sprachdaten in VoIP-Kommunikationen verschlüsselt, um die Vertraulichkeit und Integrität der Sprachübertragung zu gewährleisten. Es wird häufig in Kombination mit TLS verwendet, um sowohl die Transportdaten als auch die Sprachdaten zu schützen.
- SAVP (Secure Audio Video Profile): Ein Profil des Real-time Transport Protocol (RTP), das Sicherheitsmerkmale wie Verschlüsselung und Authentifizierung für Audio- und Videoübertragungen bietet. Es ist eine Erweiterung von SRTP und wird in VoIP-Kommunikationen verwendet, um die Sicherheit der Medienströme zu verbessern.
- ZRTP (Zimmermann Real-time Transport Protocol): Ein Protokoll für die Ende-zu-Ende-Verschlüsselung von VoIP-Kommunikationen, das von Phil Zimmermann entwickelt wurde. Es ermöglicht den Benutzern, Schlüssel auszutauschen und die Integrität der Sprachübertragung zu überprüfen, ohne auf zentrale Zertifizierungsstellen angewiesen zu sein. ZRTP bietet eine zusätzliche Sicherheitsebene für VoIP-Kommunikationen, indem es die Möglichkeit von Man-in-the-Middle-Angriffen reduziert und die Vertraulichkeit der Sprachdaten gewährleistet.
TLS ist in Verbindung mit den Zertifikaten nur für die Verschlüsselung der Transportprotokolle zuständig. SRTP und ZRTP sind für die Verschlüsselung der Sprachpakete (des Audiostreams) zuständig. Im Gegensatz zu SRTP werden mit ZRTP die Schlüssel nur zwischen den Endgeräten eines Telefonats ausgetauscht und der Server ist daran nicht beteiligt. ZRTP ermöglicht die Ende-zu-Ende-Verschlüsselung. SRTP geht nur bis zum Server. Behörden könnten sich bei SRTP ohne Probleme Zugriff auf den Server verschaffen und Abhören. Bei ZRTP ist das nicht möglich.
Die Zertifikate, die auf dem Server und den Endgeräten installiert sind, werden nur für TLS benötigt. Ohne TLS machen SRTP und ZRTP keinen Sinn, weil die Schlüssel über das Transportprotokoll (meistens SIP) ausgetauscht werden, dass ohne TLS offen lesbar für Dritte wäre und man könnte den Schlüsselaustausch mitlesen. Verschlüsselt man nur mit TLS, ist nur das Transportprotokoll verschlüsselt, also die Protokolle SIP oder IAX2 in den meisten Fällen. Die Sprachpakete, also der Audiostream, kann weiterhin abgehört werden.
Zusätzliche Sicherheit bietet der Betrieb von VPN-Verbindungen. Sämtliche Maßnahmen erhöhen die Sicherheit vor einem Abhören geschützt zu sein. Einen absoluten Schutz gibt es allerdings nie.
Einrichten des Asterisk-Server: Zum Einsatz kommt Asterisk 16 mit einer sip.conf auf einem Linux-Rechner (Debian, Raspberry). Der Asterisk ist bereits lauffähig mit einer sip.conf und ermöglicht SIP-Telefonate über das Internet, wozu die Portweiterleitung des Routers entsprechend konfiguriert ist.
In der Regel können neuere Version von Asterisk SRTP, das für eine Sprach-Verschlüsselung notwendig ist. Das etwas ältere Asterisk 16 kann es jedenfalls schon. Wir können dies in der Asterisk-Konsole überprüfen, ob das dazu notwendige Modul res_srtp vorhanden ist:
module show like srtp
Wenn nachfolgend diese oder eine ähnliche Antwort kommen sollte, ist das notwendige Modul res_srtp.so vorhanden:
raspberrypi*CLI> module show like srtp Module Description Use Count Status Support Level res_srtp.so Secure RTP (SRTP) 0 Running core 1 modules loaded
Zertifikat besorgen und einrichten: Wir befinden uns auf dem Asterisk-Rechner und besorgen uns ein Zertifikat mit zugehöriger privater Schlüsseldatei:
openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout server.key -out server.crt
Danach werden einige Dinge abgefragt, die wir freiwillig eintragen können. Der letzte Punkt ist allerdings zwingend. Wenn der Common Name (CN) im Zertifikat nicht mit der DNS-Adresse übereinstimmt, die Du verwendest, um deinen Asterisk-Server zu identifizieren, musst du ein neues Zertifikat erstellen, das den richtigen Common Name enthält. Beispiel: Die DNS des Asterisk-Servers lautet blabla.dyndns.org. Dann muss der Common Name des Zertifikats ebenfalls blabla.dyndns.org lauten.
Das von diesem Befehl generierte Zertifikat ist ein selbst signiertes X.509-Zertifikat. Es wird oft für Testzwecke oder für den internen Gebrauch verwendet, wenn keine offizielle Zertifizierungsstelle (CA) verfügbar ist.
Dieses selbst signierte Zertifikat wird in diesem Fall verwendet, um die TLS-Verbindung zwischen deinem SIP-Server und den Endgeräten wie PhonerLite zu sichern. Da es selbst signiert ist, müssen die Endgeräte möglicherweise manuell konfiguriert werden, um es zu akzeptieren, oder es muss in den Vertrauensspeicher des Geräts importiert werden.
Es wurden durch den letztgenannten Befehl eine server.key und eine server.crt erzeugt: Diese beiden Dateien sind in den Ordner mit dem Asterisk-Konfigurationsdateien zu verschieben:
sudo mv server.crt /etc/asterisk sudo mv server.key /etc/asterisk
Anpassen der sip.conf von Asterisk und zusätzliche Portweiterleitung im Router: Unter [general] der sip.conf wird das Folgende ergänzt. Es wird dabei angenommen der Asterisk-Router verwendet den SIP-Port 5064. Üblich ist eigentlich 5060, aber das ist aus Sicherheitsgründen nicht zu empfehlen. Zudem kann die Verwendung der 5060 zu Konflikten führen, wenn man zum Beispiel mit den beliebten FritzBoxen arbeitet.
; Zusätzlicher Eintrag unter [general] der sip.conf tlsenable=yes tlsbindaddr=0.0.0.0:5065 ; Für TLS Port 5065 gewählt, weil im Beispiel der SIP-Port 5064 ist. tlscertfile=/etc/asterisk/server.crt tlsprivatekey=/etc/asterisk/server.key ; tlsclientcert=/etc/asterisk/server.crt ; tlsclientprivatekey=/etc/asterisk/server.key ; Es handelt sich hierbei um eine Erweiterung der sip.conf. Dabei verändert sich an den bereits vorhandenen ; nichts und sie funktionieren weiterhin unverschlüsselt. Nur Sip-Accounts mit der weiter unten im Text ; beschriebenen Ergännzung und Änderung des Ports von 5064 auf 5065 sind verschlüsselt, wenn im Endgerät ; die entsprechenden Einstellungen vorhanden sind.
Portweiterleitung im Router nicht vergessen: Der Server im Beispiel verwendet für SIP den Port 5064. Wir wählen für TLS einen Port höher als den Port 5064, also demnach den Port 5065. Im Router müssen wir deshalb eine zusätzliche Portweiterleitung für den Port 5065 mit TCP einrichten. Ohne diese Portweiterleitung klappt es nicht mit der Anmeldung der Endgeräte. Für SIP alleine ist UDP geeignet. Für SIP in Verbindung mit TLS ist TCP die bessere Wahl. Begründung: https://chat.openai.com/share/e6684c6c-ea80-4278-83d3-574f93a907f3.
SIP-Accounts für Verschlüsselung: Weiter müssen wir noch den oder die SIP-Accounts anpassen, die für die Verschlüsselung geeignet sein sollen. Hier am Beispiel der Telefonnummer 1009 gezeigt:
; Telefon 1009 PhonerLite [1009] type=friend context=meinesiptelefone secret=hierstehteinpasswort host=dynamic username=1009 canreinvite=no dtmfmode=rfc2833 disallow=all allow=g722 allow=alaw allow=ulaw allow=gsm callerid = "Maximilian Mustermann" <1009> ; ; Ergänzungen und Änderungen für Verschlüsselungen: ; transport=tls,udp ; Erklärung am Ende des Artikels, warum auch udp encryption=yes ; directmedia=yes ; zum Experimentieren ; directrtpsetup=yes ; zum Experimentieren port=5065
Ergänze den Account mit den letzten Einträgen und ändere den Port. In diesem Beispiel von 5064 auf 5065.
Und nun soll Asterisk schließlich die Änderungen der sip.conf übernehmen:
sip reload ; oder Alternativ ganz sicher: core reload now
Damit wäre Asterisk konfiguriert und der Router wurde um die Portweiterleitung für den Port 5065 mit TLS ergänzt. Jetzt müssen wir nur noch die Endgeräte entsprechend konfigurieren.
Einrichten von PhonerLite: Wir gehen davon aus, dass PhonerLite bereits für unverschlüsselte Telefonate richtig konfiguriert wurde und müssen nun einige Einträge ergänzen und ändern. Eventuell sollten wir die server.key und die server.crt mit Filezilla kopieren können oder auf einem USB-Stick bereithalten können. Alles wurde mit der 32Bit-Version 2.7 getestet. Nach einem Update vom März 2024 ließen sich nicht mehr die server.key und server.crt einbinden.
Angenommen der Registrar hieß früher blabla.dyndns.org:5064. Dann müssen wir ihn auf blabla.dyndns.org:5065 ändern:
Unter Netzwerk wählen wir „TLS“ aus:
Unter Codecs setzen wir ein Häkchen bei SRT, SAVP und ZRTP:
Erklärung:
-
-
- SRTP (Secure Real-time Transport Protocol): Ein Sicherheitsprotokoll, das Echtzeitkommunikationen wie VoIP verschlüsselt, um Vertraulichkeit, Integrität und Authentizität zu gewährleisten.
- SAVP (Secure Audio Video Profile): Eine Erweiterung des Real-time Transport Protocol (RTP), die Sicherheitsmerkmale wie Verschlüsselung und Authentifizierung für Audio- und Videoübertragungen bietet.
- ZRTP (Zimmermann Real-time Transport Protocol): Ein Protokoll für die Ende-zu-Ende-Verschlüsselung von VoIP-Kommunikationen, das von Phil Zimmermann entwickelt wurde, dem Schöpfer von PGP. Es ermöglicht Benutzern, Schlüssel auszutauschen und die Integrität von VoIP-Anrufen zu überprüfen, ohne auf zentrale Zertifizierungsstellen angewiesen zu sein.
-
Unter Zertifikate kopieren wir wie im Bild zu sehen die server.key und server.crt hinein:
Was tun bei Schwierigkeiten mit neuen Versionen: Jetzt kommt der fast größte Schreck meines Lebens. Ich habe alles mit einer alten 32-Bit Version 2.7 oder etwas höher aus dem Jahr 2019 oder etwas später getestet und dann habe ich am 23.4.2024 ein Update auf die neueste Version gemacht. Das Ergebnis war, das die neue Version nicht mehr die server.key und server.crt übernimmt. Wenn jemand die alte Version haben möchte, schicke ich sie gerne zu. Es sind nur 5 MB. Bei mir hatte ich die neue Version installiert gelassen und die alte Version installiert. Die alte Version hatte dann alle Einstellungen übernommen. und die neue Version „überschrieben“. Die Version 2.7 läuft bei mir auf Win7 SP1 32Bit und auf Win10 64Bit.
Erledigt! Nun geht es an das Testen.
Das erste verschlüsselte Telefonat: Hier mit der Testnummer 333 auf dem Server, die eine Musik abspielt.
Fehlermeldung in der Asterisk-Console: Meldet man ein PhonerLite ab, in dem man das PhonerLite-Programm beendet, können jede Menge Fehlermeldungen im regelmäßigen Abstand und permanent auftreten:
[2024-04-21 23:44:18] WARNING[22329]: chan_sip.c:3832 __sip_xmit: sip_xmit of 0x73f71140 (len 610) to 5.150.201.25:49270 returned -2: Success [2024-04-21 23:44:18] ERROR[22329]: chan_sip.c:4321 __sip_reliable_xmit: Serious Network Trouble; __sip_xmit returns error for pkt data [2024-04-21 23:44:20] WARNING[22329]: chan_sip.c:17923 register_verify: peer '1009' HAS NOT USED (OR SWITCHED TO) TLS in favor of 'UDP' (but this was allowed in sip.conf)! -- Unregistered SIP '1009' [2024-04-21 23:44:23] NOTICE[22329]: chan_sip.c:30425 sip_poke_noanswer: Peer '1014' is now UNREACHABLE! Last qualify: 3 [2024-04-21 23:44:33] WARNING[22329]: chan_sip.c:3832 __sip_xmit: sip_xmit of 0x73f71140 (len 610) to 5.150.201.25:49270 returned -2: Success [2024-04-21 23:44:33] ERROR[22329]: chan_sip.c:4321 __sip_reliable_xmit: Serious Network Trouble; __sip_xmit returns error for pkt data [2024-04-21 23:44:48] WARNING[22329]: chan_sip.c:3832 __sip_xmit: sip_xmit of 0x73f71140 (len 610) to 5.150.201.25:49270 returned -2: Success [2024-04-21 23:44:48] ERROR[22329]: chan_sip.c:4321 __sip_reliable_xmit: Serious Network Trouble; __sip_xmit returns error for pkt data
Abhilfe: Wir ändern in der sip.conf in den entsprechenden Account der problematischen Nummer den Eintrag
transport=tls encryption=yes port=5065
zu
transport=tls,udp encryption=yes port=5065
Falls in PhonerLite bei älteren Versionen unter „Netzwerk“ die Möglichkeit besteht „Verbindungsart erzwingen“ auszuwählen, dürfen wir dort kein Häkchen setzen.
Beenden wir dann nach diesen Änderungen PhonerLite, erscheint in der Asterisk-Console einmalig folgende Meldung:
[2024-04-21 23:40:45] WARNING[22329]: chan_sip.c:17923 register_verify: peer '1009' HAS NOT USED (OR SWITCHED TO) TLS in favor of 'UDP' (but this was allowed in sip.conf)! -- Unregistered SIP '1009'
Und die permanenten Fehlermeldungen erscheinen nicht mehr.
Inzwischen wurde das Windows-SIP-Softphone MicroSIP ebenfalls auf Verschlüsselung umgestellt: Allerdings konnte man nirgends ZRTP einrichten oder aktivieren. Damit ist es für eine Ende-zu-Ende-Verschlüsselung wahrscheinlich nicht geeignet.
Weiteführender Link zu Asterisk und Ende-zu-Ende-Verschlüsselung:
Ende-zu-Ende-Verschlüsselung von Telefonaten mit PhonerLite und AntiSip – 24.4.2024: Telefonate mit vollständiger Ende-zu-Ende-Verschlüsselung gelingen mit den Softphones PhonerLite über den kostenlosen SIP-Provider AntiSip. Selbst der Telefonprovider kann durch die verwendete Verschlüsselungstechnik mit Hilfe von ZRTP, SRTP und TLS das Gespräch nicht abhören. – weiter – |
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.
Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter – |