2016-05-03 15 views
1

Ich baue eine grundlegende SIP UA.Asterisk Digest Authentifizierung für SIP INVITE gibt "Benutzer Mismatch" Fehler

INVITE sip:[email protected] SIP/2.0 
From: "110"<sip:[email protected]>;tag=80859256 
To: <sip:[email protected]> 
Call-ID: 80859256 
CSeq: 80859256 INVITE 
Via: SIP/2.0/UDP 192.168.1.92:6000;branch=z9hG4bK-80859256 
Contact: <sip:[email protected]> 

Als Antwort erhalte ich die folgende Herausforderung: Ich sende die folgenden INVITE, wie in Asterisk-Konsole gesehen (nur relevant Header-Authentifizierung angezeigt)

SIP/2.0 401 Unauthorized 
Via: SIP/2.0/UDP 192.168.1.92:6000;branch=z9hG4bK- 80859256;received=127.0.0.1 
From: "110"<sip:[email protected]>;tag=80859256 
To: <sip:[email protected]>;tag=as25af7f49 
Call-ID: 80859256 
CSeq: 80859256 INVITE 
Server: Asterisk PBX 13.7.2 
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE 
Supported: replaces, timer 
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="20e95772" 
Content-Length: 0 

antworte ich mit dem folgenden :

ACK sip:[email protected] SIP/2.0 
From: "110"<sip:[email protected]>;tag=80859256 
To: <sip:[email protected]>;tag=as25af7f49 
Call-ID: 80859256 
CSeq: 80859256 ACK 
Via: SIP/2.0/UDP 192.168.1.92:6000;rport;branch=z9hG4bK-80859256 
Contact: <sip:[email protected]> 
Content-Length: 0 


INVITE sip:[email protected] SIP/2.0 
From: "110"<sip:[email protected]>;tag=80859256 
To: <sip:[email protected]> 
Call-ID: 80859256 
CSeq: 80859257 INVITE 
Via: SIP/2.0/UDP 192.168.1.92:6000;rport;branch=z9hG4bK-80859257 
Max-Forwards:5 
Allow: REGISTER, INVITE, ACK, BYE, REFER, NOTIFY, CANCEL, INFO, OPTIONS, PRACK, SUBSCRIBE 
Contact: <sip:[email protected]> 
Authorization: Digest 
username="110",realm="asterisk", nonce="20e95772",uri="sip:[email protected]",response="ed2de012b2255e85ddb0ee724b9a3ffd" 
Session-Expires: 1800 
Min-SE: 90 
Content-Type: application/sdp 

Ich habe nicht über die tatsächliche SDP mit den Einladungen gesendet. Das Passwort für die Nebenstelle 110 ist 110 wie in der sip.conf definiert.

FRAGE: ich diese Störung erhalte:

WARNING...: chan_sip.c:16702 check_auth: username mismatch, have <110>, digest has <> 
NOTICE...: chan_sip.c:25603 handle_request_invite: Failed to authenticate device "110"<sip:[email protected]>;tag=76981187 

Dies wird durch eine "SIP/2.0 403 Forbidden" Nachricht folgt.

Ich glaube nicht, dass meine Digest Berechnung wie in der zweiten INVITE gesendet falsch ist.

Was muss geändert werden? Ich habe eine Menge Zeit damit verbracht, das zu debuggen ... Jede Hilfe würde sehr geschätzt werden.

+1

Gibt es eine CR + LF in Ihrer tatsächlichen Antwort zwischen "Authorization: Digest" und "Benutzername = ...", oder wird dies nur in der Debug-Ausgabe in der Konsole hinzugefügt? Wenn dies der Fall ist, müssen Sie die neue Zeile mit Leerzeichen beginnen oder es wird nicht als eine Fortsetzung des Autorisierungsheaderfelds betrachtet, d. H. Das Autorisierungsfeld enthält keinen Benutzernamen – snowcloned

+0

@snowcloned Thanks a LOT. Das war's. Ich habe nicht bemerkt, dass ich nach "Digest" einen CR + LF eingefügt habe, bis du darauf hingewiesen hast. Ich dachte nur, dass es sich um eine aufgewickelte Anzeige in der Konsole handelte. Das geändert und es funktioniert. Kannst du das als Antwort geben und ich werde SEHR glücklich sein, es zu akzeptieren, denn es ist in der Tat eine Antwort, nicht nur ein Kommentar. – Sam

Antwort

1

Der Benutzername in der Antwort wird von Asterisk als leer geparst, da das Autorisierungsheaderfeld nach dem CR + LF zwischen den Wörtern "Digest" und "Benutzername" endet. Damit ein Kopfzeilenfeld in einer neuen Zeile fortgesetzt wird, muss die Zeile mit Leerzeichen beginnen. von RFC3261:

Header fields can be extended over multiple lines by preceding each extra line with at least 
one SP or horizontal tab (HT). The line break and the whitespace at the beginning of the 
next line are treated as a single SP character. 

entweder die CR + LF, oder Leerzeichen eingefügt am Anfang der neuen Zeile entfernen sollte das Problem beheben.