X da Questão - Blog da Saper

SIP REGISTER

SIP REGISTER

Aqui você aprenderá como funciona o pacote SIP REGISTER, comumente utilizado para registrar um ramal em um PABX IP.
Você também entenderá qual é a lógica de termos um pacote REGISTER seguido de um 401 Unauthorized em cada autenticação e como isso é importante para a sua segurança.

Tentarei ser o mais objetivo e didático possível!

Vamos lá!

O registro SIP é uma das formas onde o SERVIDOR passa a conhecer o IP do CLIENTE.

Sugiro que leia novamente a frase acima.

É isso mesmo!
A principal utilização do registro (REGISTER) é fazer com que o servidor saiba qual é o IP do ramal que está ativo. Desta forma, o servidor conseguirá mandar uma chamada para ele, pois saberá qual é o seu IP naquele exato momento.

E se o IP mudar?
Um novo pacote REGISTER é enviado de tempos em tempos do cliente para o servidor, visando sempre manter o servidor atualizado sobre qual é o IP do ramal.
Portanto, não tem problemas se o IP do ramal mudar. Ele pode ser dinâmico e funcionará perfeitamente bem! mesmo atrás de NAT (assunto pra outro dia)!

Quando temos IP fixo no lado do servidor e no lado do cliente a configuração pode ser feita por apontamento IP - IP, e o registro passa a se tornar desnecessário! Geralmente essa configuração é utilizada em troncos SIP entre o seu servidor e a sua operadora de telefonia.

Muitas pessoas acreditam que o REGISTRO serve exclusivamente para permitir que aquele ramal faça ligações pelo PABX. Este conceito está errado. Um ramal não registrado não receberá ligações, pois o PABX não saberá qual é o seu IP, mas poderá realizar ligações normalmente.

 

Capturando um pacote REGISTER

Primeiramente, considere o meu cenário:
Estou com um telefone IP Yealink, com IP 10.255.2.5.
Configurei o ramal 200 nele, registrando no IP 10.255.2.22, com a senha MySecret
Iniciei uma captura de pacotes no servidor.

Veja o que capturei:

Note que temos 4 pacotes, nesta ordem:

  1. REGISTER
  2. 401 Unauthorized
  3. REGISTER
  4. 200 OK

É normal (e esperado) que muita gente se pergunte o motivo desse "401 Unauthorized" e após um "200 OK". Este procedimento faz parte do que chamamos de CHALLENGE. E serve para que a sua senha não trafegue em texto puro.

Calma! Vou explicar em detalhes!

Veja na primeira imagem acima está mostrando o primeiro pacote REGISTER.
Note que dentro deste pacote não possui a sua senha em nenhum campo.
Como que o servidor irá retornar um "200 OK", indicando que você está autenticado, se você não enviou a sua senha? Pois é.. então é esperado o retorno "401 Unauthorized".

O segredo está nos detalhes! Esta resposta do pacote 401 Unauthorized contém algumas informações importantes, destacadas abaixo:

Atenção especial na linha "www-authenticate" que o servidor enviou para o meu ramal.

Basicamente ele está dizendo: "Você não está autorizado. Caso queira se autenticar aqui, me envie a sua senha criptografada com o algoritmo MD5. Adicione neste hash MD5 os valores de nonce e realm".

Vamos ao próximo pacote de REGISTER! Agora contendo a autenticação:

Note que agora, diferentemente do primeiro REGISTER, temos a linha "Authorization". Agora sim estamos a um passo de registrar, de fato, o ramal.
Veja o campo "response", marcado na seta em vermelho. Este é o hash md5 da minha senha MySecret.

E a resposta do servidor: "200 OK" - Autorizado!!

E é desta forma, que a autenticação ocorre! Chave pra um lado, md5 pra outro, e voilà: 200 OK.

Portanto, aprendemos que o CHALLENGE (Register -> 401 -> REGISTER -> 200) é um procedimento correto e esperado, para garantir a sua segurança na autenticação do seu ramal.

 

Extras - Como é o código por trás do hash MD5 do REGISTER?

Agora, se você é curioso como eu, e deseja saber como é feito o hash em md5 do pacote REGISTER, essa leitura é pra você.

Criei um código PHP simples que irá gerar esse hash da senha. Assim facilitará o seu entendimento e você poderá ainda brincar com o código. O resultado dele é este:

O campo "response", que o seu ramal envia para o servidor, nada mais é que "um mix" de 03 hashes MD5. E sim, tanto o seu ramal quanto o seu servidor ficam a todo o momento realizando hashes e mais hashes md5.

Abaixo, o coração do código:

Simples, não?
O resultado do $hash_3 é o seu response!

Ok, ok, se você chegou até aqui, então vamos aos detalhes...

Primeiramente, você precisará ter as 2 informações abaixo:

  1. Seu usuário SIP
  2. Sua senha SIP

Além das informações acima, você vai precisar coletar no pacote SIP as 3 informações abaixo (são fornecidas pelo 401 Unauthorized):

  1. realm
  2. nonce
  3. uri

É simples, veja onde elas estão:

Obs: Note que as informações 1 e 3 são fornecidas pelo 401 Unauthorized. Estas são utilizadas para montagem do hash md5 que será posteriormente enviado do cliente para o servidor.

Agora com estas 5 informações coletadas, basta inserir dentro do código e executá-lo. Altere as 5 primeiras variáveis.

Segue o código em texto puro:

Alterado as variáveis, basta rodar para obter o resultado abaixo:

E aí, matou a curiosidade? Este post foi útil para você? Espero, realmente, que tenha gostado! Afinal, essa é uma dúvida de muitos clientes.

Descubra como simplificar de vez sua operação de voz

Símbolo Whatsapp
Avatar WhatsApp
WhatsApp
Conta comercial
Ao utilizar o chat, você aceita a nossa Política de Privacidade.

Seja bem vindo ao nosso atendimento por WhatsApp. Como podemos lhe ajudar?

online
Ao utilizar o chat, você aceita a nossa Política de Privacidade.
Avatar