Назад | Перейти на главную страницу

Несоответствие имени пользователя аутентификации дайджеста SIP Asterisk

У меня есть система звездочек, которую я пытаюсь использовать в качестве резервной копии для нашей системы 3com. Мы уже используем его для конференц-моста. Наши телефоны - это 3com 3C10402B, поэтому у меня нет проблем со старыми телефонами 3com, которые поставляются без образа SIP.

Телефоны 3com обмениваются данными по протоколу SIP с Asterisk, но не могут зарегистрироваться, потому что они представляют дайджест-значение имени пользователя, которое не соответствует тому, что Asterisk считает необходимым.

В качестве примера приведем соответствующие строчки после успешной регистрации с программного телефона:

Server sends:
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="1cac3853"
Phone responds:
Authorization: Digest username="2321", realm="asterisk", nonce="1cac3853", uri="sip:192.168.254.12", algorithm=md5, response="d32df9ec719817282460e7c2625b6120"

Для телефона 3com эти же строки выглядят так (и не работают):

Server sends:
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="6c915c33"
Phone responds:
Authorization: Digest username="sip:2321@192.168.254.12", realm="asterisk", nonce="6c915c33", uri="sip:192.168.254.12", opaque="", algorithm=MD5, response="a89df25f19e4b4598595f919dac9db81"

По сути, Asterisk хочет видеть имя пользователя в поле Digest username 2321, но телефон 3com отправляет sip: 2321@192.168.254.12.

Кто-нибудь знает, как сообщить звездочке принять этот формат имени пользователя в дайджест-аутентификации?

Вот информация sip.conf для этого расширения:

[2321]  
deny=0.0.0.0/0.0.0.0  
disallow=all  
type=friend  
secret=1234  
qualify=yes  
port=5060  
permit=0.0.0.0/0.0.0.0  
nat=yes  
mailbox=2321@device  
host=dynamic  
dtmfmode=rfc2833  
dial=SIP/2321  
context=from-internal  
canreinvite=no  
callerid=device <2321>  
allow=ulaw, alaw  
call-limit=50  

... и для тех, кто интересуется твердостью, вот отладочные данные попытки регистрации:


REGISTER sip:192.168.254.12 SIP/2.0
v: SIP/2.0/UDP 192.168.254.157:5060
t: 
f: 
i: fa4451d8-01d6-1cc2-13e4-00e0bb33beb9
CSeq: 18580 REGISTER
Max-Forwards: 70
m: ;dt=544
Expires: 3600
User-Agent: 3Com-SIP-Phone/V8.0.1.3
X-3Com-PhoneInfo: firstRegistration=no; primaryCallP=192.168.254.12; secondaryCallP=0.0.0.0;


--- (11 headers 0 lines) ---
Using latest REGISTER request as basis request
Sending to 192.168.254.157 : 5060 (no NAT)


SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.254.157:5060;received=192.168.254.157
From: 
To: 
Call-ID: fa4451d8-01d6-1cc2-13e4-00e0bb33beb9
CSeq: 18580 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: 
Content-Length: 0



SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.254.157:5060;received=192.168.254.157
From: 
To: ;tag=as3fb867e2
Call-ID: fa4451d8-01d6-1cc2-13e4-00e0bb33beb9
CSeq: 18580 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="6c915c33"
Content-Length: 0


Scheduling destruction of SIP dialog 'fa4451d8-01d6-1cc2-13e4-00e0bb33beb9' in 32000 ms (Method: REGISTER)
confbridge*CLI>

REGISTER sip:192.168.254.12 SIP/2.0
v: SIP/2.0/UDP 192.168.254.157:5060
t: 
f: 
i: fa4451d8-01d6-1cc2-13e4-00e0bb33beb9
CSeq: 18581 REGISTER
Max-Forwards: 70
m: ;dt=544
Expires: 3600
User-Agent: 3Com-SIP-Phone/V8.0.1.3
Authorization: Digest username="sip:2321@192.168.254.12", realm="asterisk", nonce="6c915c33", uri="sip:192.168.254.12", opaque="", algorithm=MD5, response="a89df25f19e4b4598595f919dac9db81"
X-3Com-PhoneInfo: firstRegistration=no; primaryCallP=192.168.254.12; secondaryCallP=0.0.0.0;


--- (12 headers 0 lines) ---
Using latest REGISTER request as basis request
Sending to 192.168.254.157 : 5060 (NAT)


SIP/2.0 100 Trying
Via: SIP/2.0/UDP 192.168.254.157:5060;received=192.168.254.157
From: 
To: 
Call-ID: fa4451d8-01d6-1cc2-13e4-00e0bb33beb9
CSeq: 18581 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Contact: 
Content-Length: 0



SIP/2.0 403 Authentication user name does not match account name
Via: SIP/2.0/UDP 192.168.254.157:5060;received=192.168.254.157
From: 
To: ;tag=as3fb867e2
Call-ID: fa4451d8-01d6-1cc2-13e4-00e0bb33beb9
CSeq: 18581 REGISTER
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Length: 0


Scheduling destruction of SIP dialog 'fa4451d8-01d6-1cc2-13e4-00e0bb33beb9' in 32000 ms (Method: REGISTER)

Это обходной путь, который, как я обнаружил, подходит для моей ситуации, но в целом я считаю его грубым взломом. Я нашел этот драгоценный камень в chan_sip.c:

/* Always OK if no secret */
if (ast_strlen_zero(secret) && ast_strlen_zero(md5secret))
  return AUTH_SUCCESSFUL;

Итак, мой обходной путь - поставить:

секрет =

В конфиге для каждого расширения. Для меня это нормально, потому что я не беспокоюсь о том, что кто-то в моей сети попытается зарегистрироваться для расширения, которое им не принадлежит. В целом, однако, это совершенно небезопасно, потому что он обходит любую дальнейшую аутентификацию (включая мою проблему с несоответствием имени пользователя).

Судя по всему, что я могу найти (и я уверен, что вы искали), ваша установка кажется правильной.

Мое единственное предложение - установить defaultip=192.168.254.12 что, похоже, единственное, что я вижу пропущенным между тем, что я читал как стандарт, и вашим sip.conf

Удачи!