【发布时间】: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