{"id":1978,"date":"2024-10-08T21:31:52","date_gmt":"2024-10-08T19:31:52","guid":{"rendered":"https:\/\/www.daniel-ritter.de\/blog\/?p=1978"},"modified":"2024-10-11T00:36:20","modified_gmt":"2024-10-10T22:36:20","slug":"sip-voip-mit-dus-net-asterisk-srtp-und-tls","status":"publish","type":"post","link":"https:\/\/www.daniel-ritter.de\/blog\/sip-voip-mit-dus-net-asterisk-srtp-und-tls\/","title":{"rendered":"Verschl\u00fcsseltes SIP VoIP mit dus.net, chan_pjsip, Asterisk, SRTP und tls."},"content":{"rendered":"<p>Mit folgender Config habe ich eine verschl\u00fcsselte Verbindung der SIP-Signalisierung mit TLS und der RTP-Sprachkan\u00e4le mit SRTP zum Provider <a href=\"https:\/\/dus.net\">dus.net<\/a> in einem Trunk-Tarif hergestellt:<\/p>\n<p>Hier die pjsip.conf:<br \/>\nUsername ist im Format 000xxxxxxxxx und wird in der Config DUSNET_USERNAME genannt.<\/p>\n<p>Der Pfad \/etc\/ssl\/certs ist der Standardpfad f\u00fcr die Sammlung vertrauensw\u00fcrdiger Zertifikate bei Ubuntu\/Debian. K\u00f6nnte bei anderen Distros woanders liegen.<\/p>\n<p>F\u00fcr die Verschl\u00fcsselung relevante Teile sind <span style=\"color: #ff0000;\">rot markiert<\/span>.<\/p>\n<pre>;\/etc\/asterisk\/pjsip.conf\r\n<strong>[transport-tls]\r\ntype = transport<\/strong>\r\n; Config des tls Sockets\r\n\r\n;Dies zusammen mit ca_list_path und method aktiviert tls\r\n<span style=\"color: #ff0000;\">protocol = tls<\/span>\r\n\r\n\r\n;LAN interface von Asterisk\t\t\t\t\t\r\nbind = 192.168.0.3:5061\t\t\r\n;LAN Subnet von Asterisk\t\r\nlocal_net = 192.168.0.0\/24\t\r\n;Pfad f\u00fcr die Zertifikat CAs bei Ubuntu\/Debian\r\n;Ben\u00f6tigt werden hier die Zertifikate f\u00fcr LetsEncrypt (ISRG_Root_X1.pem und ISRG_Root_X2.pem)\r\n<span style=\"color: #ff0000;\">ca_list_path = \/etc\/ssl\/certs\t\r\nmethod = tlsv1_2<\/span>\r\n\r\n<strong>[reg_secure.dus.net]\r\ntype = registration<\/strong>\r\n; SIP registration bei dus.net\r\n\r\n\r\nretry_interval = 20\r\nmax_retries = 0\r\nexpiration = 45\r\ntransport = transport-tls\r\noutbound_auth = auth_reg_secure.dus.net\r\nclient_uri = sip:DUSNET_USERNAME@<span style=\"color: #ff0000;\">secure.dus.net<\/span>\r\nserver_uri = sip:<span style=\"color: #ff0000;\">secure.dus.net<\/span>\r\n\r\n<strong>[auth_reg_secure.dus.net]\r\ntype = auth<\/strong>\r\n; Zugangsdaten f\u00fcr dus.net\r\n\r\npassword = DUSNET_PASSWORD\r\nusername = DUSNET_USERNAME\r\n\r\n<strong>[dusnet]\r\ntype = aor<\/strong>\r\n; Name des SIP-Kontaktes\r\n\r\ncontact = sip:DUSNET_USERNAME@<span style=\"color: #ff0000;\">secure.dus.net<\/span>\r\n<strong>\r\n[dusnet]\r\ntype = identify<\/strong>\r\n; Zuordnung von incoming traffic von dus.net zum lokalen endpoint \"dusnet\"\r\n\r\nendpoint = dusnet\r\nmatch = 83.125.8.71\r\n\r\n<strong>[dusnet]\r\ntype = auth<\/strong>\r\n;Zugangsdaten f\u00fcr ausgehende Gespr\u00e4che f\u00fcr Endpunkt \"dusnet\". Die gleichen wie oben\r\n\r\nusername = DUSNET_USERNAME\r\npassword = DUSNET_PASSWORD\r\n\r\n<strong>[dusnet]\r\ntype = endpoint<\/strong>\r\n; Lokaler Endpunkt dus.net\r\n\r\n; Der Kontext im Dialplan in dem eingehende Anrufe von dus.net landen\r\ncontext = in\t\t\t\t\r\ndisallow = all\r\nallow = ulaw\r\nallow = alaw\r\nrtp_symmetric = yes\r\n;RTP-Session durch NAT auch bei Stille offen halten\r\nrtp_keepalive = 10\t\r\n;Hier wird SRTP aktiviert\t\t\r\n<span style=\"color: #ff0000;\">media_encryption = sdes\t\t<\/span> \r\ntone_zone = de\r\nlanguage = de\r\noutbound_auth = dusnet\r\naors = dusnet\r\n\r\n<\/pre>\n<p>Grober Ablauf der Verschl\u00fcsselung:<\/p>\n<p>&#8211; Server sendet seinen public Key.<br \/>\n&#8211; Client verifiziert mit Hilfe des Zertifikats aus der CA<br \/>\n&#8211; Client und Server generieren gemeinsamen Schl\u00fcssel.<br \/>\n&#8211; Verbindung wird mit Schl\u00fcssel encrypted.<br \/>\n&#8211; tls steht<br \/>\n&#8211; Im tls-verschl\u00fcsselten SIP-Kanal werden SDP-Bl\u00f6cke eingebettet<br \/>\n&#8211; In diesen verhandeln Client und Server Krypto-Algo f\u00fcr SRTP und den Schl\u00fcssel<br \/>\n&#8211; RTP-Kan\u00e4le werden mit Schl\u00fcssel encrypted<br \/>\n&#8211; SRTP steht<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit folgender Config habe ich eine verschl\u00fcsselte Verbindung der SIP-Signalisierung mit TLS und der RTP-Sprachkan\u00e4le mit SRTP zum Provider dus.net in einem Trunk-Tarif hergestellt: Hier die pjsip.conf: Username ist im Format 000xxxxxxxxx und wird in der Config DUSNET_USERNAME genannt. Der Pfad \/etc\/ssl\/certs ist der Standardpfad f\u00fcr die Sammlung vertrauensw\u00fcrdiger Zertifikate bei Ubuntu\/Debian. K\u00f6nnte bei anderen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1883,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[227,224,225],"tags":[27,233,232,230,231,55],"class_list":["post-1978","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-network","category-voip","tag-asterisk","tag-chan_pjsip","tag-pjsip","tag-sip","tag-srtp","tag-tls"],"_links":{"self":[{"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/posts\/1978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/comments?post=1978"}],"version-history":[{"count":28,"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/posts\/1978\/revisions"}],"predecessor-version":[{"id":2015,"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/posts\/1978\/revisions\/2015"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/media\/1883"}],"wp:attachment":[{"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/media?parent=1978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/categories?post=1978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.daniel-ritter.de\/blog\/wp-json\/wp\/v2\/tags?post=1978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}