Verschlüsselung von Telefonaten mit TLS und SRTP für Asterisk und PhonerLite

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:

Testumgebung2phonerliitezrtpantisip150px
Testumgebung mit zwei PhonerLite über den Server von AntiSip
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.”

Testumgebung2phonerliitezrtp
Testumgebung für die Ende-zu-Ende-Verschlüsselung mit zwei PhonerLite und einem Asterisk-Server. Das Programm WireShark dient zur Untersuchung des Netzwerkverkehrs.

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:

    1. 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.
    2. 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.
    3. 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.
    4. 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.
    5. 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.

Um ein Zertifikat von einer offiziellen Zertifizierungsstelle (Certificate Authority, CA) zu erhalten, können wir uns an verschiedene Anbieter wenden, die SSL/TLS-Zertifikate ausstellen. Einige bekannte Zertifizierungsstellen sind:

        1. Let’s Encrypt
        2. DigiCert
        3. Comodo
        4. GeoTrust
        5. Symantec

Wir können die Website der jeweiligen Zertifizierungsstelle besuchen und dort Informationen zu den angebotenen Zertifikaten sowie den Prozess zur Beantragung eines Zertifikats finden. Normalerweise muss man einige Informationen über seine Organisation und Domain bereitstellen und möglicherweise einen Validierungsprozess durchlaufen, um die Echtheit der eigenen Domain zu bestätigen. Die Kosten für ein Zertifikat können je nach Anbieter und Zertifikatstyp variieren. Let’s Encrypt bietet beispielsweise kostenlose Zertifikate an, während andere Anbieter kostenpflichtige Zertifikate anbieten.

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:

Phonerlitedyndns
Unter Server blaba.dyndns.org:5065 eintragen. Rechts auf Speichern klicken.

Unter Netzwerk wählen wir “TLS” aus:

Phonerlitetlsnetzwerk
TLS auswählen
Phonerlite2.7tls Nicht Erzwingen
Bei älteren Versionen “Verbindungsart erzwingen” NICHT ankreuzen!!!!

Unter Codecs setzen wir ein Häkchen bei SRT, SAVP und ZRTP:

Phonerlitecodecs
Unter Codecs bei SRTP, SAVP und ZRTP ein Häkchen setzen. Ob ZRTP tatsächlich funktioniert, ist nicht sicher.

Erklärung:

      1. SRTP (Secure Real-time Transport Protocol): Ein Sicherheitsprotokoll, das Echtzeitkommunikationen wie VoIP verschlüsselt, um Vertraulichkeit, Integrität und Authentizität zu gewährleisten.
      2. 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.
      3. 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:

Phonerlitezertifikate
Klicke auf die Symbole mit den drei Punkten und kopiere dann die server.key und server.crt hinein. Eventuell alle Dateien anzeigen lassen.

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.

Phonerliteverbindung Zum Server
Klicke zur Kontrolle auf das Symbol mit dem Vorhängeschloss. Wenn alles in Ordnung ist, kommt SRTL. Klicke auf das Symbol darunter und es erscheint TLS. Die untere Leiste zeigt, dass die Registrierung korrekt ist und über TLS-Port 5065 erfolgt.

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.

Microsip Konto Konfiguration Tls Srtp
Beispiel einer Konfiguration von MicroSIP für TLS und SRTP.

Weiteführender Link zu Asterisk und Ende-zu-Ende-Verschlüsselung:

Testumgebung2phonerliitezrtpantisip150px
Testumgebung mit zwei PhonerLite über den Server von AntiSip
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

Auf einem Raspberry Pi lässt sich ein kompletter Telefonserver betreiben, der seinen Teilnehmern über Landesgrenzen hinweg kostenloses Telefonieren von unterwegs oder daheim ermöglicht.
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