[Gelöst] Authentifizierungsproblem SIP-Client nach Erstellung IP-Telefon über tr-064 (x_voip, SetClient4) & allgemeine Verständnisfragen

chrsto

IPPF-Promi
Mitglied seit
8 Sep 2010
Beiträge
3,797
Punkte für Reaktionen
727
Punkte
113
Ich beziehe mich auf die x_voip Dokumentation von AVM. Zunächst ein paar Verständnisfragen zu X_AVM-DE_SetClient{X}.

_SetClient ist obsolet, habe ich verstanden. Aber wozu gibt es _SetClient2 und _SetClient3? Aus meiner Sicht ist nur _SetClient4 sinnvoll nutzbar, da nur hier ein Benutzername angegeben werden kann. in _SetClient2 fehlt dazu noch die Möglichkeit die eingehende Rufnummer anzugeben. Was übersehe ich hier?

Dann zur konkreten Frage bei _SetClient4:

Wenn ich darüber einen neues IP-Telefon anlege und das Anlegen über die 2FA bestätigt habe, erscheint das IP Telefon wie gewünscht unter Telefonie -> Telefoniegeräte. Ein beliebiger VoIP Client scheitert dann aber bei der Anmeldung: SIP/2.0 401 Unauthorized.

Lösche ich das Telefon und lege es über die Weboberfläche der Fritz!Box mit den identischen Daten erneut an, klappt die Anmeldung des VoIP Clients sofort.

Ergänzung: Das Ganze spielt sich auf einer Fritz!Box 7530AX mit Fritz!OS 8.0 im IP-Client Modus ab.

In WireShark sieht das so aus:
XML:
<SOAP-ENV:Body>
<ns1:X_AVM-DE_SetClient4>
<NewX_AVM-DE_ClientIndex xsi:type="xsd:int">6</NewX_AVM-DE_ClientIndex>
<NewX_AVM-DE_ClientPassword xsi:type="xsd:string">telefon7</NewX_AVM-DE_ClientPassword>
<NewX_AVM-DE_ClientUsername xsi:type="xsd:string">telefon6</NewX_AVM-DE_ClientUsername>
<NewX_AVM-DE_PhoneName xsi:type="xsd:string">SIP-DECT4</NewX_AVM-DE_PhoneName>
<NewX_AVM-DE_ClientId xsi:type="xsd:string">SIP-DECT4</NewX_AVM-DE_ClientId>
<NewX_AVM-DE_OutGoingNumber xsi:type="xsd:string">1234567</NewX_AVM-DE_OutGoingNumber>
<NewX_AVM-DE_InComingNumbers xsi:type="xsd:string">&lt;?xml version="1.0"?&gt;
&lt;List&gt;&lt;Item&gt;&lt;Number&gt;1234567&lt;/Number&gt;&lt;Type&gt;eVoIP&lt;/Type&gt;&lt;Index&gt;0&lt;/Index&gt;&lt;Name/&gt;&lt;/Item&gt;&lt;/List&gt;
</NewX_AVM-DE_InComingNumbers>
</ns1:X_AVM-DE_SetClient4>
</SOAP-ENV:Body>

Von der Fritz!Box kommt dann korrekt der Hinweis, dass 2FA erwartet wird:

XML:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>866</errorCode>
<errorDescription>second factor authentication required</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>

Dem komme ich nach:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:dslforum-org:service:X_AVM-DE_Auth:1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:SetConfig>
<NewAction xsi:type="xsd:string">start</NewAction>
</ns1:SetConfig>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

... und erhalte meinen Token:

XML:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<u:SetConfigResponse xmlns:u="urn:dslforum-org:service:X_AVM-DE_Auth:1">
<NewState>waitingforauth</NewState>
<NewToken>06e57652-1dd2-11b2-b595-9dd66ecc2df6</NewToken>
<NewMethods>button,dtmf;*12622</NewMethods>
</u:SetConfigResponse>
</s:Body>
</s:Envelope>

Den packe ich in den Header und sende den Ursprünglichen _SetClient4 Request erneut ab (wie in x_auth gefordert):

XML:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:dslforum-org:service:X_VoIP:1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="avm.de" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<avm:token xmlns:avm="avm.de" mustUnderstand="1">06e57652-1dd2-11b2-b595-9dd66ecc2df6</avm:token>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:X_AVM-DE_SetClient4>
<NewX_AVM-DE_ClientIndex xsi:type="xsd:int">6</NewX_AVM-DE_ClientIndex>
<NewX_AVM-DE_ClientPassword xsi:type="xsd:string">telefon7</NewX_AVM-DE_ClientPassword>
<NewX_AVM-DE_ClientUsername xsi:type="xsd:string">telefon6</NewX_AVM-DE_ClientUsername>
<NewX_AVM-DE_PhoneName xsi:type="xsd:string">SIP-DECT4</NewX_AVM-DE_PhoneName>
<NewX_AVM-DE_ClientId xsi:type="xsd:string">SIP-DECT4</NewX_AVM-DE_ClientId>
<NewX_AVM-DE_OutGoingNumber xsi:type="xsd:string">1234567</NewX_AVM-DE_OutGoingNumber>
<NewX_AVM-DE_InComingNumbers xsi:type="xsd:string">&lt;?xml version="1.0"?&gt;
&lt;List&gt;&lt;Item&gt;&lt;Number&gt;1234567&lt;/Number&gt;&lt;Type&gt;eVoIP&lt;/Type&gt;&lt;Index&gt;0&lt;/Index&gt;&lt;Name/&gt;&lt;/Item&gt;&lt;/List&gt;
</NewX_AVM-DE_InComingNumbers>
</ns1:X_AVM-DE_SetClient4>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Anschließend ist das Telefon erstellt. Ich schneide direkt an der Fritz!Box mit, sehe also, dass das Passwort zumindest korrekt ankommt. Wo liegt der Fehler? Darf das Passwort nicht im Klartextübertragen werden? Dazu finde ich nichts in den Dokumentationen. Was übersehe ich hier?
 
Zuletzt bearbeitet:
Was übersehe ich hier?
Das weiß ich auch nicht, hätte aber eine (oder zwei) Theorien, die ich an Deiner Stelle prüfen würde.

Ohne das jetzt selbst nachvollzogen zu haben ... hast Du mal probiert, das Kennwort für die Anmeldung und den Benutzernamen (beides natürlich für den neuen SIP-Client) DEUTLICH anders zu vergeben? Nicht dass da AVM am Ende irgendwo noch diese beiden Werte vergleicht und bei zu großer Übereinstimmung dann ablehnt (wie m.E. im GUI implementiert) - ggf. auch ohne passende Fehlermeldung (was natürlich ein Fehler WÄRE). Außer das oben stehende telefon6 und telefon7 sind nicht die real verwendeten Werte - aber dann würde man ja eher Benutzername und Kennwort (o.ä.) wählen als Ersetzung.

Was steht denn in der Konfiguration für diese beiden Werte, wenn Du die voip.cfg exportierst, nachdem der neue Client erstellt wurde? (Ich gehe mal schwer davon aus, daß Dir bekannt ist, wie man die verschlüsselten Werte ansehen kann.)

Auch bin ich mir nicht wirklich sicher, daß hier die Angabe der ClientID überhaupt erforderlich oder auch nur sinnvoll ist - die dient ja eigentlich nur der Verknüpfung von Einträgen in der apps/apps-Sektion der ar7.cfg mit dem neu angelegten SIP-Client (steht dann als appid im neuen Eintrag in der voip.cfg) und wenn da am Ende tatsächlich nicht nur beim Löschen des App-Eintrags auch der SIP-Client entfernt wird, sondern die Anmeldung auf "normalem Weg" behindert wird (z.B. wenn sie direkt aus dem LAN erfolgt, was bei den AVM-Apps ja normalerweise nicht der Fall wäre - die kommen dann i.d.R. auch im LAN über die MyFRITZ!-Adresse), dann würde das auch eine denkbare Erklärung liefern. Oder der Eintrag wird bei vorhandenem Wert für ClientID, aber gleichzeitig fehlendem Eintrag für eine solche App, gar nicht erst richtig/vollständig erzeugt - halte ich auch für denkbar.

Zumindest haben ja die per GUI erzeugten Einträge (die bei Dir ja auch sofort funktionieren) bei mir gar keinen Wert bei appid gesetzt ... wie das nach einem SetClient4 MIT oder OHNE die Verwendung einer App-Anmeldung aussieht, weiß ich aber auch nicht - kannst Du ja problemlos prüfen.

Hast Du denn überhaupt mal die per TR-064 erzeugten Einträge (in der voip.cfg) mit denen verglichen, die über das GUI des FRITZ!OS erstellt wurden?
 
  • Like
Reaktionen: chrsto
Danke für den Wink mit dem Lattenzaun, das hat geholfen.

Mir war vollkommen entfallen, dass ich die Konfiguration der Fritz!Box exportieren und dann analysieren kann. Die über tr064 gesendeten Passwörter waren und sind dort korrekt hinterlegt.

Auch habe ich die Dokumentation wohl falsch verstanden. Ich hatte zwar testweise mal den kompletten Parameter für die ClientID weggelassen (was natürlich mit einem Fehler quittiert wurde), aber nie eine leere ClientID gesendet.

Nun, und das war es dann auch: Mit einer leeren ClientID funktioniert es.

Zunächst habe ich, wie von dir empfohlen, mit sehr unterschiedlichen Anmeldedaten für den SIP Client getestet: strasse29 als Benutzer und freibier4711 als Passwort. Im Anschluss dann mit telefon6 als Benutzer und telefon7 als Passwort. Beide IP-Telefone lassen eine Anmeldung zu. Einen Abgleich der Übereinstimmung gibt es - zumindest in der Kombination - wohl nicht.

Die voip.cfg mit entfernter ClientID wieder einlesen, habe ich nicht getestet.

Ich danke dir herzlich.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.