Сбой аутентификации прокси-сервера SIP

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

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

Когда приложение передает запрос INVITE, Asterisk отвечает ответом 407 (требуется аутентификация прокси). На этот раз ответ содержит заголовок Proxy-Authenticate. Мое приложение снова отправляет INVITE, но на этот раз с заголовком Authorization, на что Asterisk отвечает тем же ответом 407 (требуется прокси-аутентификация).

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

<сильный>>>

REGISTER sip:10.0.84.30:5060 SIP/2.0
Call-ID: [email protected]
CSeq: 1 REGISTER
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
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:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
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:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>;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:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
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:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>
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:301@asterisk>;tag=2B3n8g
To: <sip:301@asterisk>;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:302@asterisk SIP/2.0
Call-ID: [email protected]  
CSeq: 3 INVITE
From: <sip:301@asterisk>;tag=KOZWxg
To: <sip:302@asterisk>
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:301@asterisk>;tag=KOZWxg
To: <sip:302@asterisk>;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:302@asterisk SIP/2.0
CSeq: 4 INVITE
From: <sip:301@asterisk>;tag=2B3n8g
To: <sip:302@asterisk>
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:302@asterisk",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:301@asterisk>;tag=2B3n8g
To: <sip:302@asterisk>;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

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

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


person bgh    schedule 29.04.2011    source источник


Ответы (3)


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

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

Вы упоминаете использование From URI в своем вопросе. раздел 3.2.2 RFC 2617 говорит, что вы используете Request-URI (sip:302@asterisk ). Следите за изменениями, относящимися к SIP, в RFC 3261, раздел 22.4.

person Frank Shearar    schedule 29.04.2011
comment
Спасибо за совет. Я изменил заголовок на заголовок Proxy-Authorization, но все равно получаю ту же проблему. Я обновил SIP-разговор в вопросе. - person bgh; 29.04.2011

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

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

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

person bgh    schedule 03.05.2011
comment
Я знаю, что это годы спустя, но у меня есть аналогичная проблема, которую я опубликовал здесь Если можно глянуть, буду признателен. Я потратил много времени, пытаясь исправить это, но безрезультатно... - person Sunny; 03.05.2016

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

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

person sipsorcery    schedule 29.04.2011
comment
Я изменил URI дайджеста на URI запроса. REGISTER-запросы все еще работают (по-видимому, Asterisk не волнует, какой URI используется для URI дайджеста для этого запроса (например, я могу использовать URI sip:blah@asterisk), хотя он проверяет, что ответ был рассчитан правильно), но на INVITE-запросы я все равно получаю такие же ответы. Я пробовал использовать заголовок авторизации и заголовок прокси-авторизации. В обоих случаях я получаю тот же результат. Я обновил запросы в вопросе, как сейчас. - person bgh; 03.05.2011