2016-05-03 26 views
1

私は基本的なSIP UAを構築しています。私はアスタリスクのコンソールに見られるように、以下は、INVITEを送信しています(認証のみに関連するヘッダが表示されます):SIP INVITEのアスタリスクダイジェスト認証で「user mismatch」エラーが発生する

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]> 

応答では、私は次のような課題を取得:

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 

は、私は次のように返答し:

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 

招待状と一緒に送信された実際のSDPには含まれていません。拡張子110のパスワードは、sip.confで定義されている110です。

QUESTION: 私はこのエラーを取得しています:

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 

これは、 "SIP/2.0 403禁止" のメッセージが続いています。

2番目のINVITEで送信されたダイジェスト計算が間違っているとは思いません。

何を変更する必要がありますか?私はこれをデバッグするのに多くの時間を費やしてきました... どんな助けも高く評価されるでしょう。

+1

"Authorization:Digest"と "username = ..."の間に実際のレスポンスにCR + LFがあるのですか?これはコンソールのデバッグ出力に追加されただけですか?その場合、新しい行を空白で開始する必要があります。そうしないと、Authorizationヘッダーフィールドの続きと見なされません。つまり、Authorizationフィールドにはユーザー名が含まれません。 – snowcloned

+0

@snowclonedありがとうございます。それはそれだった。あなたが指摘するまで、「ダイジェスト」の後にCR + LFを挿入していたことはわかりませんでした。私はちょうどそれがコンソールのラップアラウンドディスプレイだと思った。それを変更し、それが動作します。あなたはこれを答えとして提供できますか?それは本当に答えだけではないので、私はそれを受け入れることが非常に喜ばしくなります。 – Sam

答えて

1

「ダイジェスト」と「ユーザー名」の間のCR + LFの後にAuthorizationヘッダーフィールドが終了するため、レスポンスのユーザー名がAsteriskによって解析されています。ヘッダーフィールドを新しい行に続けるには、行を空白で始める必要があります。 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. 

どちらかがCR + LFを削除するか、新しい行の先頭に空白を挿入する問題を修正する必要があります。

関連する問題