用于 SIP INVITE 的 Asterisk Digest 身份验证会导致“用户不匹配"错误 [英] Asterisk Digest Authentication for SIP INVITE gives "user mismatch" error

查看:30
本文介绍了用于 SIP INVITE 的 Asterisk Digest 身份验证会导致“用户不匹配"错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个基本的 SIP UA.我正在发送以下邀请,如 Asterisk 控制台中所示(仅显示与身份验证相关的标头):

I am building a basic SIP UA. I am sending the following INVITE, as seen in Asterisk console (only headers relevant to authentication are shown):

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

作为回应,我收到了以下挑战:

In response, I get the following challenge:

 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:110@192.168.1.92>;tag=80859256
 To: <sip:104@192.168.1.92>;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:104@192.168.1.92 SIP/2.0
 From: "110"<sip:110@192.168.1.92>;tag=80859256
 To: <sip:104@192.168.1.92>;tag=as25af7f49
 Call-ID: 80859256
 CSeq: 80859256 ACK
 Via: SIP/2.0/UDP 192.168.1.92:6000;rport;branch=z9hG4bK-80859256
 Contact: <sip:110@192.168.1.92>
 Content-Length: 0


 INVITE sip:104@192.168.1.92 SIP/2.0
 From: "110"<sip:110@192.168.1.92>;tag=80859256
 To: <sip:104@192.168.1.92>
 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:110@192.168.1.92>
 Authorization: Digest
 username="110",realm="asterisk", nonce="20e95772",uri="sip:104@192.168.1.92",response="ed2de012b2255e85ddb0ee724b9a3ffd"
 Session-Expires: 1800
 Min-SE: 90
 Content-Type: application/sdp

我没有在上面包含与邀请一起发送的实际 SDP.分机110的密码是sip.conf中定义的110.

I have not included above the actual SDP sent with the invites. The password for extension 110 is 110 as defined in sip.conf.

问题:我收到此错误:

 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:110@192.168.1.92>;tag=76981187

这之后是SIP/2.0 403 Forbidden"消息.

This is followed by a "SIP/2.0 403 Forbidden" message.

我不认为我在第二个 INVITE 中发送的摘要计算是错误的.

I do not believe that my digest calculation as sent in the second INVITE is wrong.

需要改变什么?我花了很多时间调试这个......任何帮助将不胜感激.

What needs to be changed? I have spent a lot of time in debugging this... Any help would be HIGHLY appreciated.

推荐答案

响应中的用户名被 Asterisk 解析为空,因为 Authorization 头字段在单词Digest"和username"之间的 CR+LF 之后结束.为了让标题字段在新行上继续,该行需要以空格开头;来自 RFC3261:

The username in the response is being parsed by Asterisk as empty because the Authorization header field ends after the CR+LF between the words "Digest" and "username". In order for a header field to be continued on a new line, the line needs to start with whitespace; from 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 或在新行的开头插入空格应该可以解决问题.

Either removing the CR+LF, or inserting whitespace at the beginning of the new line should correct the problem.

这篇关于用于 SIP INVITE 的 Asterisk Digest 身份验证会导致“用户不匹配"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆