srtp GS5.1.2 <-> Snom

310 views
Skip to first unread message

Christian Felsing

unread,
May 12, 2013, 8:21:17 AM5/12/13
to gs5-...@googlegroups.com
Hallo zusammen,

offenbar funktioniert SRTP nun auch mit GS5 <-> Snom (FW 8.7.4.19). Dazu müssen in der Datei /opt/GS5/app/views/config_snom/show.xml.haml
folgende Parameter geändert werden:

%user_srtp{:idx => index, :perm => 'RW'}= 'on'
%user_savp{:idx => index, :perm => 'RW'}= 'on'


Apache neu starten und Telefone booten. Im Freeswitch Log sollten dann Einträge wie

2013-05-12 13:57:21.271236 [DEBUG] sofia.c:5696 Remote SDP:
v=0
o=root 1523613626 1523613626 IN IP4 192.168.26.69
s=call
c=IN IP4 192.168.26.69
t=0 0
m=audio 53028 RTP/SAVP 9 0 8 3 99 108 18 101
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:3 GSM/8000
a=rtpmap:99 G726-32/8000
a=rtpmap:108 AAL2-G726-32/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=crypto:1 AES_CM_128_HMAC_SHA1_32 inline:***
a=ptime:20

2013-05-12 13:57:21.271236 [DEBUG] sofia_glue.c:5017 Set Remote Key [1 AES_CM_128_HMAC_SHA1_32 inline:***]
2013-05-12 13:57:21.271236 [DEBUG] sofia_glue.c:3182 Set Local Key [1 AES_CM_128_HMAC_SHA1_32 inline:***]


zu finden sein, wenn eine Verbindung aufgebaut wird. Das bringt allerdings erst wirklich etwas, wenn die SIP Verbindung auch verschlüsselt ist. Bisher habe ich noch nicht herausgefunden, wie GS5 den SIP Proxy setzt,
da müsste in meiner Installation dann 192.168.0.253:5061; transport=tls start anstatt nur 192.168.0.253 stehen. Das Server Zertifikat sollte sich eigentlich mit dem Eintrag

  %certificates
    %certificate_url= 'https://gs5.lan/gemeinschaft.der'

 
ausrollen lassen, klappt allerdings noch nicht so recht. Das AMOOMA Zertifikat habe ich durch ein eigenes Zertifikat ersetzt, das Zertifikat sollte man
zweckmäßigerweise auch unter /var/opt/GS5/freeswitch/conf/ssl installieren, wobei die Links agent.pem und cafile.pem heißen müssen. Dann lässt sich Freeswitch
auch mit der Option TLS starten und es müsste dann auch an Port 5061 lauschen. Damit würde auch die Aushandlung des SRTP Session Keys
verschlüsselt erfolgen.

Viele Grüße
Christian

Julian Pawlowski

unread,
May 12, 2013, 10:04:35 AM5/12/13
to gs5-...@googlegroups.com
Hallo Christian,

danke, das klingt ja prima! Sehr gute Arbeit. :-)

Wenn du es genau austangiert hast baue ich das gerne so um, dass man nach einer Installation nur SRTP und SIPS aktivieren und optional das selbstgenerierte Zertifikat austauschen muss.


Gruß
Julian

Christian Felsing

unread,
May 13, 2013, 2:46:47 AM5/13/13
to gs5-...@googlegroups.com
Hallo Julian,

zunächst sollte das Installscript /opt/GSE/static/etc/init.d/gemeinschaft-runtime-init angepasst werden:

--- gemeinschaft-runtime-init    2013-03-25 11:59:18.000000000 +0100
+++ gemeinschaft-runtime-init.NEW    2013-05-13 08:37:36.108479845 +0200
@@ -26,6 +26,7 @@
     FQDN="`hostname -f`";
     IPS="`hostname -I`"
 
+
     # Create SSL certificate for current Full Qualified Domain Name
     if [[
         ! -e /etc/ssl/private/${FQDN}.pem ||
@@ -33,17 +34,26 @@
         ! -e /etc/ssl/certs/${FQDN}.crt
         ]]; then
 
+        # Ask user for certificate details
+        SUBJ="/C=DE/ST=Rhineland-Palatinate/L=Neuwied/O=AMOOMA GmbH/OU=Self-generated certificate for Gemeinschaft/CN=${FQDN}"
+        KEYSIZE=2048
+        DAYS=3650
+
         # Make sure both files are not existing
         rm -rf /etc/ssl/private/${FQDN}.key /etc/ssl/certs/${FQDN}.crt /etc/ssl/certs/${FQDN}.pem
 
         echo "Generating SSL certificate for ${FQDN} ..."
-        openssl req -newkey rsa:2048 -x509 -days 3650 -nodes -out /etc/ssl/certs/${FQDN}.crt -keyout /etc/ssl/private/${FQDN}.key -subj "/C=DE/ST=Rhineland-Palatinate/L=Neuwied/O=AMOOMA GmbH/OU=Self-generated certificate for Gemeinschaft/CN=${FQDN}"
+        openssl req -newkey rsa:${KEYSIZE} -x509 -sha256 -days ${DAYS} -nodes -out /etc/ssl/certs/${FQDN}.crt -keyout /etc/ssl/private/${FQDN}.key -subj "${SUBJ}"
         update-ca-certificates
         cat /etc/ssl/private/${FQDN}.key /etc/ssl/certs/${FQDN}.crt > /etc/ssl/private/${FQDN}.pem
 
         ln -sf private/${FQDN}.pem /etc/ssl/gemeinschaft.pem
         ln -sf private/${FQDN}.key /etc/ssl/gemeinschaft.key
         ln -sf certs/${FQDN}.crt /etc/ssl/gemeinschaft.crt
+
+        cp -a /etc/ssl/private/${FQDN}.pem /var/opt/GS5/freeswitch/conf/ssl/${FQDN}.pem
+        ln -sf /var/opt/GS5/freeswitch/conf/ssl/${FQDN}.pem /var/opt/GS5/freeswitch/conf/ssl/agent.pem
+        ln -sf /var/opt/GS5/freeswitch/conf/ssl/${FQDN}.pem /var/opt/GS5/freeswitch/conf/ssl/cafile.pem
     fi
 
     # Check for available system update

Dabei habe ich da noch ein paar kleine Änderungen vorgenommen. Später passe ich das so an, dass der User da gefragt wird, ob er das Zertifikat extern signieren lassen will.

In welchen Files muss ich die Anpassungen vornehmen, dass einmal die Snoms beim Provisioning Port 5061 sowie ;transport=tls übergeben bekommen?

Soll ich dafür einen Issue erstellen?

Viele Grüße
Christian

Julian Pawlowski

unread,
May 14, 2013, 4:52:20 AM5/14/13
to gs5-...@googlegroups.com
On Monday, May 13, 2013 8:46:47 AM UTC+2, Christian Felsing wrote:
In welchen Files muss ich die Anpassungen vornehmen, dass einmal die Snoms beim Provisioning Port 5061 sowie ;transport=tls übergeben bekommen?

Das kann ich dir nicht beantworten.
 

Soll ich dafür einen Issue erstellen?

Hm. Es muss sicherlich was am Code geändert werden und ich hatte es so verstanden, dass du schon gefunden hättest wo das wäre.
Wenn das nicht der Fall ist, dann wäre ein Issue dafür zu eröffnen sicherlich richtig. Die Erledigung dauert aber eher lang vermutlich, es ist einfach zu viel in der Pipeline.


Gruß
Julian

Sascha Daniels

unread,
May 14, 2013, 9:39:02 AM5/14/13
to gs5-...@googlegroups.com
Hi,

Am 14.05.13 10:52, schrieb Julian Pawlowski:
> On Monday, May 13, 2013 8:46:47 AM UTC+2, Christian Felsing wrote:
>
> In welchen Files muss ich die Anpassungen vornehmen, dass einmal die
> Snoms beim Provisioning Port 5061 sowie *;transport=tls* übergeben
> bekommen?
>
>
> Das kann ich dir nicht beantworten.

willst Du das konfigurierbar machen, oder geht es Dir nur darum das bei
Deiner Installation alle Telefone den Parameter gesetzt bekommen?

Gruss

Sascha


Julian Pawlowski

unread,
May 14, 2013, 9:42:17 AM5/14/13
to gs5-...@googlegroups.com

Christian geht es sicherlich in erster Linie darum, dass er es zunächst einmal bei sich manuell geändert bekommt, so dass es funktioniert.
Ich würde diese Änderungen dann gerne aber auch so in den Sourcecode einbauen, dass niemand Änderungen vornehmen muss, die von einem gs-update wieder überschrieben würden. Individuelle Anpassungen am GS5 Code sollten nicht notwendig sein. Wenn es Features sind, die jeden interessieren würden, dann sollten wir sie so direkt im Code einbauen. :-)


Gruß
Julian

Sascha Daniels

unread,
May 14, 2013, 9:47:24 AM5/14/13
to gs5-...@googlegroups.com

Hi Julian,

Das ist schon klar.

Einbauen w�rde ich es aber nur, wenn es konfigurierbar ist.

Das ist Arbeit vs. zwei Zeilen in einem view ;-)

Gruss Sascha


Am 14. Mai 2013 15:42:17 schrieb Julian Pawlowski :

On Tuesday, May 14, 2013 3:39:02 PM UTC+2, Sascha Daniels wrote:

Am 14.05.13 10:52, schrieb Julian Pawlowski:
> On Monday, May 13, 2013 8:46:47 AM UTC+2, Christian Felsing wrote:
>
>     In welchen Files muss ich die Anpassungen vornehmen, dass einmal die

>     Snoms beim Provisioning Port 5061 sowie *;transport=tls* �bergeben

>     bekommen?
>
>
> Das kann ich dir nicht beantworten.

willst Du das konfigurierbar machen, oder geht es Dir nur darum das bei
Deiner Installation alle Telefone den Parameter gesetzt bekommen?


Christian geht es sicherlich in erster Linie darum, dass er es zun�chst einmal bei sich manuell ge�ndert bekommt, so dass es funktioniert.
Ich w�rde diese �nderungen dann gerne aber auch so in den Sourcecode einbauen, dass niemand �nderungen vornehmen muss, die von einem gs-update wieder �berschrieben w�rden. Individuelle Anpassungen am GS5 Code sollten nicht notwendig sein. Wenn es Features sind, die jeden interessieren w�rden, dann sollten wir sie so direkt im Code einbauen. :-)


Gru�
Julian

--
To unsubscribe from this group, send email to
gs5-users+...@googlegroups.com
 
For commercial consulting visit http://amooma.de/gemeinschaft/gs5
---
Sie haben diese Nachricht erhalten, weil Sie der Google Groups-Gruppe gs5-users beigetreten sind.
Um Ihr Abonnement f�r diese Gruppe zu beenden und keine E-Mails mehr von dieser Gruppe zu erhalten, senden Sie eine Email an gs5-users+...@googlegroups.com.
Weitere Optionen: https://groups.google.com/groups/opt_out
 
 

Julian Pawlowski

unread,
May 14, 2013, 9:47:43 AM5/14/13
to gs5-...@googlegroups.com
On Tuesday, May 14, 2013 3:47:24 PM UTC+2, Sascha Daniels wrote:

Das ist schon klar.

Einbauen w�rde ich es aber nur, wenn es konfigurierbar ist.



Das ist Arbeit vs. zwei Zeilen in einem view ;-)

;-)

Den Arbeitsaufwand kann ich nicht einschätzen, ich kann nur Wünsche äußern und den Osterhasen fragen, welche Farben er für seine Eier im Angebot hat. ^^ 

Sascha Daniels

unread,
May 14, 2013, 9:58:22 AM5/14/13
to gs5-...@googlegroups.com
Hi.

Am 14.05.13 15:47, schrieb Julian Pawlowski:
Ich frage ihn mal beim nächsten Treffen ;-)

Eine schnelle Lösung für Christian:

https://github.com/amooma/GS5/blob/master/app/views/config_snom/show.xml.haml

In Zeile 153 wird z.B. SRTP gesetzt.

Globale Einstellungen kommen in den Bereich zwischen Zeile 7 und 56.

Gruss

Sascha


Christian Felsing

unread,
May 14, 2013, 4:03:55 PM5/14/13
to gs5-...@googlegroups.com
Hallol Sascha,

danke für den Tipp, auf diese Datei bin ich bereits im Zusammenhang mit srtp gestoßen, warum mir dabei der Eintrag

%user_host{:idx => index, :perm => 'R'}= sip_account[:host]

entgangen ist, kann ich nicht mehr sagen. Ich bin jetzt mit Ruby on Rails nicht wirklich vertraut, würde

%user_host{:idx => index, :perm => 'R'}= sip_account[:host],':5061; transport=tls'

zum Ziel führen? Da sollte dann in meinem Fall 192.168.0.253:5061; transport=tls herauskommen.

Viele Grüße
Christian

Peter Kozak

unread,
May 14, 2013, 5:45:35 PM5/14/13
to gs5-...@googlegroups.com
On 05/14/2013 10:03 PM, Christian Felsing wrote:
> *%user_host{:idx => index, :perm => 'R'}= sip_account[:host],':5061;
> transport=tls'*

%user_host{:idx => index, :perm => 'R'}= sip_account[:host] + ':5061


Vielleicht geht es aber auch ohne Aenderung am Code.

http://<ip_address>/gs_parameters folgendes setzen (bzw. in der
Datenbank anlegen)

entity -> phones
section -> snom
name -> host
value -> {host}:5061;transport=tls



Mit freundlichen Gr��en

Peter Kozak

--

AMOOMA GmbH - Bachstr. 124 - 56566 Neuwied --> http://www.amooma.de
Gesch�ftsf�hrer: Stefan Wintermeyer, Handelsregister Montabaur B14998

B�cher: http://das-asterisk-buch.de - http://ruby-auf-schienen.de

Christian Felsing

unread,
May 15, 2013, 6:06:51 AM5/15/13
to gs5-...@googlegroups.com
Danke, werde ich heute abend mal testen

Viele Grüße
Christian

Christian Felsing

unread,
May 17, 2013, 2:32:41 AM5/17/13
to gs5-...@googlegroups.com
Hallo,

offenbar gibt es in GS5.1.2 noch ein Problem mit den URLs:

Wird in der dhcp.conf

    option tftp-server-name "https://192.168.26.1";
    option bootfile-name "settings-{mac}";


eingetragen, dann finden sich im Logfiles des Snom 370 Einträge wie
http://192.168.26.1:443/...
was natürlich nicht funktionieren kann. Ist im DHCP Server http eingetragen, dann wird http://192.168.26.1:80/... in den URLs für die Configs verwendet.

Zertifikate

Trägt man in die /opt/GS5/app/views/config_snom/show.xml.haml am Ende

  %certificates
    %certificate{:url => 'http://192.168.26.1/trusted_cert1.DER'}

dann kann das Snom auch Serverzertifikate bekommen. Bei selbstsignierten Zertifikaten geht das nur, wenn das Serverzertifikat manuell in das Snom installiert wurde. Die Sammlung der CA Zertifikate ist auf dem Snom 370 ein Witz, z.T. expired CA Zertifikate, Startssl und viele Andere fehlen.

Viele Grüße
Christian

Julian Pawlowski

unread,
May 17, 2013, 2:37:09 AM5/17/13
to gs5-...@googlegroups.com
On Friday, May 17, 2013 8:32:41 AM UTC+2, Christian Felsing wrote:
offenbar gibt es in GS5.1.2 noch ein Problem mit den URLs:

Wird in der dhcp.conf

    option tftp-server-name "https://192.168.26.1";
    option bootfile-name "settings-{mac}";


eingetragen, dann finden sich im Logfiles des Snom 370 Einträge wie
http://192.168.26.1:443/...
was natürlich nicht funktionieren kann. Ist im DHCP Server http eingetragen, dann wird http://192.168.26.1:80/... in den URLs für die Configs verwendet.

Passiert das auch, wenn du den mitgelieferten dnsmasq als DHCP Server aktivierst?


Gruß
Julian

Sascha Daniels

unread,
May 17, 2013, 4:01:50 AM5/17/13
to gs5-...@googlegroups.com
Hi.

Am 17.05.13 08:32, schrieb Christian Felsing:

> dann kann das Snom auch Serverzertifikate bekommen. Bei selbstsignierten
> Zertifikaten geht das nur, wenn das Serverzertifikat manuell in das Snom
> installiert wurde. Die Sammlung der CA Zertifikate ist auf dem Snom 370
> ein Witz, z.T. expired CA Zertifikate, Startssl und viele Andere fehlen.

Bekanntes Problem :-(

Wenn es Dir nur um Verschlüsselung geht, brauchst Du das nicht. Du musst
ja auf dem Snom nicht das Server Cert verifizieren. SRTP geht trotzdem.

Gruss

Sascha


Christian Felsing

unread,
May 17, 2013, 12:09:34 PM5/17/13
to gs5-...@googlegroups.com
Hi,

SRTP ist ja nicht alles, denn der SRTP Key wird über SIP ausgehandelt, deshalb bringt SRTP nur dann etwas, wenn SIP verschlüsselt ist. Nach meinem bisherigen Erkenntnisstand hilft auch hier die show.xml.haml weiter.

Es ist also
      %user_outbound{:idx => index, :perm => 'R'}= sip_account[:outbound]
durch
      %user_outbound{:idx => index, :perm => 'R'}= sip_account[:outbound] + ':5061;transport=tls'
zu ersetzen. Diese Änderung brachte für ein Snom 370 und ein 870 folgendes Resultat:

Call-ID:        386d43ae58e2-b4dw39di85wl
User:           1c73f02c91...@192.168.0.253
Contact:        "Call" <sip:1c73f02c91...@192.168.26.93:1032;transport=tls;line=qmzjxqs4;fs_nat=yes;fs_path=sip%3A1c73f02c9114ef1229d4%40192.168.26.93%3A1032%3Btransport%3Dtls%3Bline%3Dqmzjxqs4>
Agent:          snom370/8.7.3.19
Status:         Registered(TLS-NAT)(unknown) EXP(2013-05-17 18:26:20) EXPSECS(2942)
Host:           gs5
IP:             192.168.26.93
Port:           1032
Auth-User:      1c73f02c9114ef1229d4
Auth-Realm:     192.168.0.253
MWI-Account:    1c73f02c91...@192.168.0.253

Call-ID:        54000000de33-qxj9sea2icxx
User:           635b7416f2...@192.168.0.253
Contact:        "Call" <sip:635b7416f2...@192.168.26.82:4846;transport=tls;line=xxstlaly;fs_nat=yes;fs_path=sip%3A635b7416f21df4a303f0%40192.168.26.82%3A4846%3Btransport%3Dtls%3Bline%3Dxxstlaly>
Agent:          snom870/8.7.3.19
Status:         Registered(TLS-NAT)(unknown) EXP(2013-05-17 18:15:04) EXPSECS(2266)
Host:           gs5
IP:             192.168.26.82
Port:           4846
Auth-User:      635b7416f21df4a303f0
Auth-Realm:     192.168.0.253
MWI-Account:    635b7416f2...@192.168.0.253

Auf dem Snom 870 wurde auch angezeigt "gesicherte Verbindung" was mit dem Freeswitch Logs korreliert :-)

Damit wäre zumindest die Kette SIP -> RTP gesichert, was zunächst ausreichend ist, wenn die Provisionierung über einen gesicherten Kanal erfolgt ist, aber da ist der Freeswitch Teil erst einmal außen vor.

Nach Julians Empfehlung habe ich mal den isc-dhcpd abgeschaltet und den bei GS5 beiliegend dnsmasq für DHCP aktiviert.

In der gs_phone_vendors.conf ist für Snom folgendes eingetragen:
# SNOM MAC address space
dhcp-mac=SNOM,00:04:13:*:*:*
dhcp-option=SNOM,66,"https://t8100.cf.cfvpn:443"
dhcp-option=SNOM,67,"settings-{mac}"

Das Resultat ist auch nicht besser als mit dem isc-dhcpd was ich jetzt auch nicht wirklich erwartet hätte:

1/1/1970 00:01:23 [NOTICE] PHN: Setting server prio 1, type redirection, url: >http://t8100.cf.cfvpn:443/snom-a9170af083fed2bae9bb92df.xml<
1/1/1970 00:01:23 [NOTICE] PHN: Fetching URL: http://t8100.cf.cfvpn:443/snom-a9170af083fed2bae9bb92df.xml
1/1/1970 00:01:27 [NOTICE] PHN: Fetching URL: http://t8100.cf.cfvpn:443/snom-a9170af083fed2bae9bb92df.xml

1/1/1970 00:01:27 [NOTICE] PHN: Config setup: return code 500; requeueing >http://t8100.cf.cfvpn:443/snom-a9170af083fed2bae9bb92df.xml<; attempt: 2, state: 32
1/1/1970 00:01:39 [NOTICE] PHN: Config setup: return code 500; giving up on >http://t8100.cf.cfvpn:443/snom-a9170af083fed2bae9bb92df.xml<
1/1/1970 00:01:39 [NOTICE] PHN: SetProvisioningDone
1/1/1970 00:01:39 [NOTICE] PHN: Skipping prio 2 setting server, type pnp, url: ><
1/1/1970 00:01:39 [NOTICE] PHN: Setting server prio 3, type dhcp, url: >https://t8100.cf.cfvpn:443/settings-{mac}<
1/1/1970 00:01:39 [NOTICE] PHN: Fetching URL: https://t8100.cf.cfvpn:443/settings-000413412ACD

1/1/1970 00:01:39 [ERROR ] PHN: Warning: Certificate verification omitted. TLS Server authentication is switched off!
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found settings (container) XML header
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found phone-settings XML header
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found one byte encoding: 1
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found function-keys XML header
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found one byte encoding: 1
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found uploads XML header
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found one byte encoding: 1
1/1/1970 00:01:41 [NOTICE] CFG: read_upload_list: Found data upload type >gui_xml_state_settings< !
1/1/1970 00:01:41 [NOTICE] CFG: Queueing in fetch of upload (gui_xml_state_settings) from http://t8100.cf.cfvpn:443/config_snom/12/state_settings.xml
1/1/1970 00:01:41 [NOTICE] PHN: AddToUploadList: >http://t8100.cf.cfvpn:443/config_snom/12/state_settings.xml< type: gui_xml_state_settings
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found authority-certificates XML header
1/1/1970 00:01:41 [NOTICE] CFG: read_xml_settings: found one byte encoding: 1
1/1/1970 00:01:41 [NOTICE] CFG: Queueing in fetch of certificates from http://t8100.cf.cfvpn:80/trusted_cert1.DER
1/1/1970 00:01:41 [NOTICE] PHN: AddToUploadList: >http://t8100.cf.cfvpn:80/trusted_cert1.DER< type: certificates
1/1/1970 00:01:41 [NOTICE] PHN: Config setup: found xml style settings
1/1/1970 00:01:41 [NOTICE] PHN: last prov successful:1; uri: >http://t8100.cf.cfvpn:443/snom-a9170af083fed2bae9bb92df.xml<; default uri: >http://provisioning.snom.com/snom870/snom870.php?mac={mac}<
1/1/1970 00:01:41 [NOTICE] PHN: Fetching URL: http://127.0.0.1:80/dummy.htm

Viele Grüße
Christian

Christian Knoefel

unread,
Aug 8, 2013, 5:15:46 AM8/8/13
to gs5-...@googlegroups.com
Hi,

Gibt es die Möglichkeit SRTP nun mit der GS einfach zu nutzen?
Ist es bereits implementiert?
Was muss gemacht werden?

grüße
Christian

Julian Pawlowski

unread,
Aug 9, 2013, 11:36:24 AM8/9/13
to gs5-...@googlegroups.com
On Thursday, August 8, 2013 11:15:46 AM UTC+2, Christian Knoefel wrote:
Gibt es die Möglichkeit SRTP nun mit der GS einfach zu nutzen?
Ist es bereits implementiert?

Nein. Aber du kannst gerne bei der Entwicklung unterstützen :-)


Gruß
Julian 
Reply all
Reply to author
Forward
0 new messages