【问题标题】:Asterisk Digest Authentication for SIP INVITE gives "user mismatch" errorAsterisk Digest Authentication for SIP INVITE 给出“用户不匹配”错误
【发布时间】:2016-05-03 08:05:25
【问题描述】:

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

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>

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

 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。

问题: 我收到此错误:

 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”消息。

我不相信我在第二次邀请中发送的摘要计算是错误的。

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

【问题讨论】:

  • 在“授权:摘要”和“用户名=...”之间的实际响应中是否有 CR+LF,或者这只是添加到控制台的调试输出中?如果是这样,您需要以空格开始新行,否则它将不会被视为授权头字段的延续,即授权字段将不包含用户名
  • @snowcloned 非常感谢。就是这样。在您指出之前,我没有意识到我在“摘要”之后插入了 CR+LF。我只是认为它是控制台中的环绕显示。改变了它,它的工作原理。你能提供这个作为答案吗?我很乐意接受它,因为它确实是一个答案,而不仅仅是评论。

标签: asterisk sip digest-authentication


【解决方案1】:

Asterisk 将响应中的用户名解析为空,因为 Authorization 标头字段在单词“Digest”和“username”之间的 CR+LF 之后结束。为了使标题字段在新行上继续,该行需要以空格开头;来自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 或在新行的开头插入空格应该可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多