2011-04-29 6 views
2

Я разрабатываю приложение агента пользователя SIP, которое подключается к серверу Asterisk и пытается выполнить исходящий вызов. Я использую реализацию NIST API JAIN SIP.Неудача аутентификации прокси-сервера SIP

Когда приложение регистрируется, ответ 401 (неавторизованный) вызывает его с заголовком WWW-Authenticate. Приложение вставляет заголовок авторизации в следующий запрос REGISTER. На этот раз Asterisk возвращает ответ 200 (OK) - регистрация прошла успешно.

Когда приложение передает запрос INVITE, Asterisk отвечает с ответом 407 (Требуется проверка подлинности прокси). На этот раз ответ содержит заголовок Proxy-Authenticate. Мое приложение снова отправляет INVITE, но на этот раз с заголовком «Авторизация», на который Asterisk отвечает с тем же 407-м запросом на аутентификацию (Proxy Authentication Required).

Вот SIP сообщения, которые передаются ('>>' указывает на исходящие сообщения; '< <' указывает на входящие сообщения):

>>

REGISTER sip:10.0.84.30:5060 SIP/2.0 
Call-ID: [email protected] 
CSeq: 1 REGISTER 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]> 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKc7dd178d3d444ccc059a191e700fc8b73230 
Max-Forwards: 70 
Contact: <sip:10.0.85.3:5060> 
Expires: 300 
Content-Length: 0 

< <

SIP/2.0 100 Trying 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKc7dd178d3d444ccc059a191e700fc8b73230;received=10.0.85.3 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]> 
Call-ID: [email protected] 
CSeq: 1 REGISTER 
User-Agent: Asterisk PBX (switchvox) 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY 
Contact: <sip:[email protected]> 
Content-Length: 0 

< <

SIP/2.0 401 Unauthorized 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKc7dd178d3d444ccc059a191e700fc8b73230;received=10.0.85.3 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]>;tag=as3c458716 
Call-ID: [email protected] 
CSeq: 1 REGISTER 
User-Agent: Asterisk PBX (switchvox) 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY 
Contact: <sip:[email protected]> 
WWW-Authenticate: Digest realm="asterisk",nonce="6fbe5a68" 
Content-Length: 0 

>>

REGISTER sip:10.0.84.30:5060 SIP/2.0 
CSeq: 2 REGISTER 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]> 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKffb0be254f93f61fa0dc7ac32b9078a43230 
Max-Forwards: 70 
Contact: <sip:10.0.85.3:5060> 
Expires: 300 
Authorization: Digest username="301",realm="asterisk",nonce="6fbe5a68",response="bc7075e8e241a4109dfa24d6ae95e78c",algorithm=MD5,uri="sip:10.0.84.30:5060",nc=00000001 
Call-ID: [email protected] 
Content-Length: 0 

< <

SIP/2.0 100 Trying 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKffb0be254f93f61fa0dc7ac32b9078a43230;received=10.0.85.3 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]> 
Call-ID: [email protected] 
CSeq: 2 REGISTER 
User-Agent: Asterisk PBX (switchvox) 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY 
Contact: <sip:[email protected]> 
Content-Length: 0 

< <

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKffb0be254f93f61fa0dc7ac32b9078a43230;received=10.0.85.3 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]>;tag=as3c458716 
Call-ID: [email protected] 
CSeq: 2 REGISTER 
User-Agent: Asterisk PBX (switchvox) 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY 
Expires: 300 
Contact: <sip:10.0.85.3:5060>;expires=300 
Date: Tue, 03 May 2011 06:42:33 GMT 
Content-Length: 0 

>>

INVITE sip:[email protected] SIP/2.0 
Call-ID: [email protected] 
CSeq: 3 INVITE 
From: <sip:[email protected]>;tag=KOZWxg 
To: <sip:[email protected]> 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKaa0520efde83907b71d1f76315188c413230 
Max-Forwards: 70 
Contact: <sip:10.0.85.3:5060> 
Route: <sip:10.0.84.30:5060;lr> 
Content-Type: application/sdp 
Content-Length: 106 

>>

v=0 
o=- 3513393083 3513393083 IN IP4 10.0.85.3 
s=- 
c=IN IP4 10.0.85.3 
t=0 0 
m=audio 40000 RTP/AVP 3 

< <

SIP/2.0 407 Proxy Authentication Required 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bKaa0520efde83907b71d1f76315188c413230;received=10.0.85.3 
From: <sip:[email protected]>;tag=KOZWxg 
To: <sip:[email protected]>;tag=as5de9ed83 
Call-ID: [email protected] 
CSeq: 3 INVITE 
User-Agent: Asterisk PBX (switchvox) 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY 
Contact: <sip:[email protected]> 
Proxy-Authenticate: Digest realm="asterisk",nonce="74986b64" 
Content-Length: 0 

>>

INVITE sip:[email protected] SIP/2.0 
CSeq: 4 INVITE 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]> 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bK86f9dbdff9eeca422fbb67321dd45f7a3230 
Max-Forwards: 70 
Contact: <sip:10.0.85.3:5060> 
Route: <sip:10.0.84.30:5060;lr> 
Content-Type: application/sdp 
Authorization: Digest username="301",realm="asterisk",nonce="74986b64",response="a08b8d7ce96cae00e7d334e132bf7358",algorithm=MD5,uri="sip:[email protected]",nc=00000001 
Call-ID: [email protected] 
Content-Length: 106 

>>

v=0 
o=- 3513393083 3513393083 IN IP4 10.0.85.3 
s=- 
c=IN IP4 10.0.85.3 
t=0 0 
m=audio 40000 RTP/AVP 3 

< <

SIP/2.0 407 Proxy Authentication Required 
Via: SIP/2.0/UDP 10.0.85.3:5060;branch=z9hG4bK86f9dbdff9eeca422fbb67321dd45f7a3230;received=10.0.85.3 
From: <sip:[email protected]>;tag=2B3n8g 
To: <sip:[email protected]>;tag=as3c458716 
Call-ID: [email protected] 
CSeq: 4 INVITE 
User-Agent: Asterisk PBX (switchvox) 
Allow: INVITE,ACK,CANCEL,OPTIONS,BYE,REFER,SUBSCRIBE,NOTIFY 
Contact: <sip:10.0.85.3:5060> 
Proxy-Authenticate: Digest realm="asterisk",nonce="1bd30f50" 
Content-Length: 0 

Заголовок авторизации построен точно так же в обоих случаях (тот же код, который выполняется). Я использую запрос-URI запроса для «digestURI». Я пробовал использовать заголовок прокси-авторизации вместо заголовка авторизации, но результат тот же.

Может ли кто-нибудь увидеть, что я делаю неправильно? Спасибо заранее.

ответ

3

Для аутентификации на прокси (другими словами, у вас есть 407 Proxy Authentication Required вам нужен заголовок Proxy-Authorization.

Как указано в RFC 2617, вы строите это так же, как и заголовок Authorization.

Вы упомянули использование URI от вашего вопроса. RFC 2617 section 3.2.2 говорит, что вы используете Request-URI (sip:[email protected]). Следите за изменениями SIP в RFC 3261 section 22.4.

+0

Спасибо за подсказку. Я изменил заголовок на заголовок Proxy-Authorization, но я все равно получаю ту же проблему. Я обновил разговор SIP в вопросе. – bgh

0

Немного странно, что ваш сервер Asterisk отвечает 407, который я только что проверил, и он отвечает на 401. Звездочка - это, в конце концов, B2BUA, а не прокси. Я рекомендую попробовать заголовок авторизации в аутентифицированном запросе, а не прокси-авторизацию, поскольку это работает с моим сервером Asterisk.

Также вам нужно использовать URI запроса в дайджесте, а не URI заголовка. Так что в вашем случае это должно быть uri = sip: 302 @ asterisk.

+0

Я изменил URI дайджеста как запрос-URI запроса. Запросы REGISTER все еще работают (видимо, Asterisk не волнует, какой URI используется для URI дайджеста для этого запроса (например, я могу использовать URI «sip: blah @ asterisk»), хотя он проверяет, что ответ имеет был рассчитан правильно), но для запросов INVITE я все равно получаю те же ответы. Я пробовал его с помощью заголовка Authorization и с помощью заголовка Proxy-Authorization. В обоих случаях я получаю тот же результат. Я обновил запросы в вопросе, так как у меня есть это сейчас. – bgh

1

Я решил проблему. Кажется, что Asterisk не смог связать мой второй запрос INVITE с предыдущим ответом 407 (требование прокси-аутентификации), содержащим значение nonce для заголовка прокси-аутентификации.

Это произошло потому, что я не использовал те же значения для Call-ID и тег заголовка From для двух запросов INVITE. Для второго запроса INVITE, который содержит заголовок прокси-аутентификации, я случайно использовал теги Call-ID и From-header первого запроса REGISTER вместо первого запроса INVITE.

INVITE еще не успел. Для второго ответа теперь я получаю 488 (не приемлемо здесь), но я попытаюсь выяснить, что сейчас не так в другом вопросе.

+0

Я знаю, что это уже много лет, но у меня есть аналогичная проблема, которую я опубликовал [здесь] (http://stackoverflow.com/questions/36998787/asterisk-digest-authentication-for-sip-invite-gives-user-mismatch -error) Если вы можете взглянуть, оцените. Я потратил много времени, пытаясь исправить это, но безрезультатно ... – Sam

 Смежные вопросы

  • Нет связанных вопросов^_^