Пытаюсь подсоединиться к Asterisk, но не получается, хотя вроде все по стандарту.
Посылаю запрос:
REGISTER sip:522@192.168.168.3:5060 SIP/2.0
Call-ID: 3b2c02ccb9482b630b85a7e0bade659e@192.168.168.143
CSeq: 1 REGISTER
From: <sip:522@192.168.168.3>
To: <sip:522@192.168.168.3>
Via: SIP/2.0/UDP 192.168.168.3:5060
Max-Forwards: 70
Contact: <sip:522@192.168.168.3>
Expires: 300
Content-Length: 0
Приходит ответ:
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.168.3:5060;branch=z9hG4bK-323733-b04bef71f2d10b9b3d057d80bc3a7ad6;received=192.168.168.143
From: <sip:522@192.168.168.3>
To: <sip:522@192.168.168.3>
Call-ID: 3b2c02ccb9482b630b85a7e0bade659e@192.168.168.143
CSeq: 1 REGISTER
Server: Asterisk PBX 1.6.2.10
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY,INFO
Supported: replaces,timer
Content-Length: 0
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.168.3:5060;branch=z9hG4bK-323733-b04bef71f2d10b9b3d057d80bc3a7ad6;received=192.168.168.143
From: <sip:522@192.168.168.3>
To: <sip:522@192.168.168.3>;tag=as133613ec
Call-ID: 3b2c02ccb9482b630b85a7e0bade659e@192.168.168.143
CSeq: 1 REGISTER
Server: Asterisk PBX 1.6.2.10
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY,INFO
Supported: replaces,timer
WWW-Authenticate: Digest algorithm=MD5,realm="asterisk",nonce="69c56be3"
Content-Length: 0
Как и описано в стандарте, беру header WWW-Authenticate и формирую новый запрос Register:
REGISTER sip:522@192.168.168.3:5060 SIP/2.0
CSeq: 2 REGISTER
From: <sip:522@192.168.168.3>
To: <sip:522@192.168.168.3>
Via: SIP/2.0/UDP 192.168.168.3:5060
Max-Forwards: 70
Contact: <sip:522@192.168.168.3>
Expires: 300
Call-ID: 3b2c02ccb9482b630b85a7e0bade659e@192.168.168.143
WWW-Authenticate: Digest algorithm=MD5,realm="asterisk",nonce="69c56be3",username="522",response="7b2ebbf8869afc435f52d5b132563d7e",uri="sip:192.168.168.3:5060"
Content-Length: 0
Хэш код в response правильный, проверял руками. В ответ все равно получаю 401 (Unauthorized), а не 200 (OK).
Может, я что-то напутал с заголовками? В какую сторону копать?
спросил
2012-04-10 16:59:31 +0400
vallhund 1 ● 1 ● 1 ● 2
А как хеш считаешь?
switch ( 2012-04-10 21:26:04 +0400 )редактироватьВидимо, неправильно, т.к. приходит уже 403, а asterisk в логах ругается на пароль. Считаю так: username = "522"; realm = "asterisk"; password = "123456qw"; method = "REGISTER"; digest-uri = "192.168.168.3"; nonce = беру из WWW-Authentication;
A1 = MD5 (username + ":" + realm + ":" + password); A2 = MD5 (method + ":" + digest-uri); result = MD5 (A1 + ":" + nonce + ":" + A2);
Понятно, что где-то я ошибаюсь, но непонятно где. Скорее всего, в digest-uri, но стандарт слишком противоречиво описывает, что и в каком виде туда писать. (Сначала пишут, что нужен request-URI из заголовка REGISTER, а потом пишут, что digest-uri не должен содержать username и @) Сам калькулятор MD5 у меня работает правильно, я проверял.
vallhund ( 2012-04-11 14:17:06 +0400 )редактировать