Asterisk 1.6 - Empezando a experimentar SIP-TLS

Con asterisk 1.6.x se ha empezado la experimentación del protocolo TLS para volver un poco más segura la comunicación entre “entidades” que usan para comunicar entre ellas el protocolo SIP. Con el protocolo TSL todo este flujo de comunicación queda encriptado y sin posibilidad de ser “interceptado” por personas “ajenas” :) Aunque no resuelve del todo el problema de la seguridad y privacidad en la comunicaciones SIP (el audio/video `continuaría siendo enviado en “claro”), es un paso hacia una buena dirección.

Yo empecé mi primeras pruebas justo ayer y esta pequeña guía es para aquellos che quieran compartir conmigo esta experiencia. Estos son los pasos que he seguido para configurar asterisk y el SoftPhone Bria:

Primero he creado un certificado autofirmado:

cd /etc/asterisk

primero he creado una clave privada:

openssl genrsa 1024 > host.key

y luego un certificado firmado con la clave privada recién creada:

openssl req -new -x509 -nodes -sha1 -days 365 -key host.key > host.cert

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:CO
State or Province Name (full name) [Berkshire]:Bogota
Locality Name (eg, city) [Newbury]:Bogota
Organization Name (eg, company) [My Company Ltd]:VozToVoice
Organizational Unit Name (eg, section) []:TLS
Common Name (eg, your name or your server's hostname) []:sip.miodominio.com
Email Address []:admin@miodominio.com

La parte más importante del certificado es el Common Name donde tenemos que indicar el dominio que luego usaremos para conectar nuestros clientes SIP.

Una vez que tengamos los dos archivos creamos un nuevo archivo que contenga los dos:

cat host.cert host.key > asterisk.pem

Ahora podemos configurar el sip.conf

nano sip.conf

y en el bloque de configuración del soporte TLS ponemos:

tlsenable=yes ; activamos el soporte TLS

tlsbindaddr=0.0.0.0 ; la dirección ip que asterisk usará para aceptar las conexiones (si no definimos el puerto el predefinido será el 5061 que tenemos que abrir en nuestro cortafuegos – protocolo UDP)

tlscertfile=/etc/asterisk/asterisk.pem ; carpeta y nombre del archivo que contiene nuestro certificado

Siempre en el mismo archivo, para cada extensión que queremos que use el protocolo TLS para conectarse a Asterisk añadimos la línea:

transport=tls

Guardamos los cambios con CTRL-O y salimos del editor con CTRL-X

entramos en la consola de asterisk

asterisk –rvvvvvvvvvvvvvvvvvvvvv

y actualizamos la configuración SIP

CLI> sip reload

si todo salió bien aparecerá entre las distintas líneas:

SSL certificate ok

Ahora tenemos que instalar el certificado en el computador donde está instalado Bria Profesional (en mi caso Windows Vista). Para hacer esto copiamos el archivo host.cert en ese computador y le cambiamos el nombre en host.crt. Ahora lo podemos instalar clicando (en mi caso dos veces) sobre el archivo. Empezará el proceso de instalación del certificado. Una vez terminado tenemos que asegurarnos que ese certificado esté entre la lista de los certificados en que se confía.

Terminado este proceso (En windows vista para tener más información pueden consultar la “ayuda y soporte técnico” usando come clave de búsqueda “certificados”), podemos empezar con la configuración de Bria Profesional.

Lo abrimos y desde el menú “File” escogemos “Account settings”; en la nueva ventana que aparece “ADD” y configuramos nuestra nueva cuenta come en la imágenes que aparecen aquí abajo.

Damos OK y el cliente se conectará a Asterisk.

El protocolo TLS se usará solamente entre Asterisk y la extensiones configuradas con este tipo de soporte.

Logros:

  • Pude llamar de una extensión a otras, configuradas con y sin protocolo TLS (audio ok)
  • Pude llamar un numero de teléfono fijo usando un proveedor SIP (audio ok)
  • Pude consultar el correo de voz (audio ok)

Problemas:

  • A veces al colgar la línea queda levantada y los dos canales activos (no se envía el cancel al Bria o desde el Bria)
  • Lo mismo pasa con las llamadas entre extensiones
  • ¿Problemas de NAT?

Este en una parte de los mensajes “SIP” entre Asterisk y la extensión; pueden observar que efectivamente en la comunicación se utiliza el protocolo TLS:

OPTIONS sip:1300@87.12.XXX.XXX:12184;transport=TLS;rinstance=d6489313c8a01079 SIP/2.0
Via: SIP/2.0/TLS 209.17.186.221:5060;branch=z9hG4bK5478547c;rport
Max-Forwards: 70
From: "asterisk" <sip:asterisk@209.17.XXX.XXX:5060>;tag=as324ecead
To: <sip:2300@87.12.XXX.XXX:12184;transport=TLS;rinstance=d6489313c8a01079>
Contact: <sip:asterisk@209.17.XXX.XXX:5060;transport=TLS>
Call-ID: 59b623c6793270e5190b6ebd158d1002@209.17.XXX.XXX
CSeq: 102 OPTIONS
User-Agent: Asterisk PBX
Date: Sun, 03 May 2009 17:24:52 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces, timer
Content-Length: 0

---

SIP/2.0 200 OK
Via: SIP/2.0/TLS 209.17.XXX.XXX:5060;branch=z9hG4bK5478547c;rport=5061
Contact: <sip:192.168.1.102:56577;transport=TLS>
To: <sip:2300@87.12.XXX.XXX:12184;transport=TLS;rinstance=d6489313c8a01079>;tag=05350b7d
From: "asterisk"<sip:asterisk@209.17.XXX.XXX:5060>;tag=as324ecead
Call-ID: 59b623c6793270e5190b6ebd158d1002@209.17.XXX.XXX
CSeq: 102 OPTIONS
Accept: application/sdp
Accept-Language: en
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: Bria release 2.4.3 stamp 50900
Content-Length: 0

Se esperan aportes, consejos y correcciones.

 

Etiquetas de Technorati: ,,

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo

28 comentarios

En realidad no, me he quedado

En realidad no, me he quedado con SIP/TLS y SRTP (en FreeSwitch). Valdría la pena probar ZRTP, estaré atento de cualquier actualización al respecto ;-)

Problemas con TLS

Hola a todos.

Lo primero es dar las gracias por el contenido, ayuda mucho a los que estamos trabajando en esto.
He implementado todo tal cual indicas, pero al intentar la conexión entre el cliente y asterisk me indica que se está realizando la conexión mediante UDP y debe ser a través de TLS. De hecho al revisar los paquetes SIP enviados se puede ver
OPTIONS sip:1300@87.12.XXX.XXX:12184;transport=TLS;rinstance=d6489313c8a01079 SIP/2.0
Via: SIP/2.0/UDP 209.17.186.221:5060;branch=z9hG4bK5478547c;rport

por lo que algo está realizando mal el cliente, pero no se el qué. ¿alguna sugerencia?

Muchas gracias

Re: problema TLS

Desafortunadamente no aparece todo el sip debug, pero me imagino que el cliente no puede conectarse a través de TLS. Una posibilidad es que el cliente no soporte el protocolo TLS, otra un problema con la instalación del certificado. Quizas si nos cuenta que cliente usas y si tuviste problema con la instalación del certificado en la "maquina" desde donde ejecutas el cliente, se puede entender mejor la situación.
Chao.

Muchas gracias por la rápida

Muchas gracias por la rápida respuesta

La verdad es que en estos momentos no tengo todos los datos disponibles porque ahora estoy en el trabajo, y quizá por eso mi explicación fue un poco escueta. Mañana por la tarde, intentaré poner más información (datos del intercambio SIP, etc), aunque alguna ya la puedo ir avanzando...

Tengo Asterisk en una máquina linux. Es la versión trunk con soporte SRTP que entiendo que al estar basada en la versión 1.6 también adminte TLS.

La parte SRTP la tengo conseguida, pero obviamente el intercambio de claves se realiza en claro, por eso necesito establecer TLS.

Como softphones he usado el phonerLite, Bria professional y alguno más que instalé en el último momento y que no recuerdo el nombre (mañana os lo comento) todos ellos desde windows XP. En principio la generación del certificado no me ha dado error, si bien no tengo muy claro el tema del dominio, le he puesto el nombre de la máquina que corre asterisk. Aparentemente asterisk se inicia bien, sin ningún error, aunque mañana lo veré mejor, ya que releyendo el post no soy consciente de haber visto SSL certificate ok.

Respecto a la conexión del cliente si le pongo transport=tls,udp, obviamente sí conecta por udp, pero no es lo que busco, pero con tls solo no consigo nada.

Espero me podáis ayudar, pues llevo unos días "atrancado" en este punto.

Si necesitáis más información, encantado de darla, de todas formas, mañana intentaré ampliar las trazas y mensajes en concreto que me da asterisk.

Un saludo y muchísimas gracias por la inestimable ayuda.

Hola a todos Sigo con mis

Hola a todos

Sigo con mis problemas para establecer la conexión con TLS.

El cliente lo configuro con TLS activado, en el caso del BRIA no da ningún error el cliente, pero no hace siquiera intento de conectarse con Asterisk, si habilito la conexion por UDP se conecta sin problemas.

En el caso del phonerLite también habilito TLS y este si intenta conectarse, pero siempre a través de UDP, por lo que Asterisk indica que no es un método de transporte válido y que solo admite TLS.

El certificado lo generé y seguí los pasos tal y como indicas en la explicación y en ningún punto me generó ningún error.

La versión de asterisk que estoy usando es la versión trunk con SRTP que debería de permitir también TLS ¿Alguien sabe si esto es correcto?

Lo que no veo es que asterisk cargue el certificado por ningún lado, pero tampoco veo ningún error al respecto.

Espero que me podáis ayudar porque empiezo a estar desesperado con este asunto ya que me está bloqueando todo el trabajo que me queda por hacer...

Mucha gracias por todo y un saludo

P.D. cualquier cosa que necesitéis no dudéis en pedírmela.

SIP TLS

Quizás si posteas la configuración de tu sip.conf (la parte TLS y la extensión que usas para conectarte desde el Bria podemos echarte una mano.

Eso que no te aparece nada en la consola me parece raro.

Intentaste hacer pruebas con la versión 1.6.X?

Como tienes configurado el logger.conf?

deberías tener algo por el estilo

console => verbose,notice,warning,error,debug,dtmf

Sigo con los problemas

Hola de nuevo

Pues acabo de instalar la versión standard 1.6.1.0 y tiene exactamente el mismo comportamiento que la versión con soporte SRTP.

A continuación paso a detallar la configuración que he seguido:
La generación del certificado sigo paso a paso lo que indicais en las instrucciones, aunque en Common Name introduzco la IP del servidor asterisk, ya que no trabajo con dominios.

Seguidamente, la configuración del sip.conf es la siguiente:
[general]
context=default
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/asterisk.pem
srtpcapable=yes
language=es

[softphones](!)
type=friend
context=default
canreinvite=no
host=dynamic
disallow=all
allow=gsm
allow=ulaw
allow=alaw
srtpcapable=yes
transport=tls

[1000](softphones)
mailbox=1000@default

Cuando uso el phonerLite con conexión TLS, asterisk me responde: "'UDP' is not a valid tranport for '1000'. we only use 'TLS'! ending call

Cuando uso el bria professional, asterisk no se entera de nada.

Tengo que decir que en el arranque de asterisk, éste no me dice nada de "SSL certificate ok" por lo que no sé si estará cargando bien el certificado ¿hay que activar algo en concreto al instalarlo?

Bueno, a ver si poco a poco conseguimos que esto me funciona ya que lo necesito lo antes posible.

Muchas gracias por todo y un saludo

P.D. El logger.conf lo tenía con menos nivel del que tú me señalabas, solo tenía "notice,warning,error", pero aunque lo he cambiado no veo mucho más en la consola.

Dos cosas (TLS)

En sip.conf pusiste una linea tipo:

domain=tuIP

esto porque por algún lado debe aparecer el nombre de dominio (aunque sea una dirección IP) que pusiste en la generación del certificado.

Cargaste el certificado en windows?

en la dirección para registrar el bria pusiste:

tuip:5061

Por lo demás la configuración me parece que está bien pero es raro que dando sip reload no te aparezca ninguna linea relacionada con el certificado ssl

Cuéntame

Chao

Hola de nuevo Parece que algo

Hola de nuevo

Parece que algo he avanzado.

El caso es que he desinstalado asterisk, he actualizado las librerías libcrypto++-dev, libssl-dev y lybxcrypt-dev y vuelto a instalar asterisk y ahora sí que me sale lo de "ssl certificate ok".

Ahora el softphone PhonerLite si conecta a asterisk a través de SSL, pero.... No consiguo establecer ninguna llamada.

La Topología que tengo es:
Softphone1-Asterisk1-Asterisk2-Softphone2

Tengo la misma configuración en todos y al intentar establecer una llamada me dice:

WARNING[17916]: chan_sip.c:11868 check_auth: username mismatch, have , digest has
[May 27 20:06:49] NOTICE[17916]: chan_sip.c:19019 handle_request_invite: Failed to authenticate device "PhonerLite" <1000>

Tengo que remarcar, que donde

Tengo que remarcar, que donde pone "digest has" a continuación pone "" que es una de las centralitas (no se porque al copiar y pegar no ha salido) y a continuación de "authenticate device" pone " ;"

Un saludo

Guia carpeta doc de las fuentes

En la carpeta doc de las fuentes de asterisk aparece una pequeña guia de como conectar dos servidores asterisk a traves de tls

Te la pego:

Sample config
-------------

Here are the relevant bits of config for setting up TLS between 2
asterisk servers. With server_a registering to server_b

On server_a:

[general]
tlsenable=yes
tlscertfile=/etc/asterisk/asterisk.pem
tlscafile=/etc/ssl/ca.pem ; This is the CA file used to generate both certificates
register => tls://100:test@192.168.0.100:5061

[101]
type=friend
context=internal
host=192.168.0.100 ; The host should be either IP or hostname and should
; match the 'common name' field in the servers certificate
secret=test
dtmfmode=rfc2833
disallow=all
allow=ulaw
transport=tls
port=5061

On server_b:
[general]
tlsenable=yes
tlscertfile=/etc/asterisk/asterisk.pem

[100]
type=friend
context=internal
host=dynamic
secret=test
dtmfmode=rfc2833
disallow=all
allow=ulaw
;You can specify transport= and port=5061 for TLS, but its not necessary in
;the server configuration, any type of SIP transport will work
;transport=tls
;port=5061

Ojala te sirva.
Chao

Conseguido

Hola de nuevo

Pues en principio ya está conseguido. He conseguido establecer la conexión TLS entre todas las partes y tengo todo el tráfico cifrado con SRTP.

Lo que me extraña es que al capturar el tráfico con el wireshark, los paquetes de voz solo aparecen con el protocolo SRTP cuando van de servidor asterisk a servidor asterisk, cuando van entre los clientes y los servidores asterisk aparecen como UDP. ¿Sabéis por qué puede ser?

Muchas gracias y un saludo

Paquetes SRTP

Hola,

Me alegra que lo hayas conseguido.

No se como es tu configuración pero se me ocurre que el trafico SRTP va solamente de asterisk a asterisk y no de cada asterisk a los clientes conectados porque quizás así lo definiste.

Te hago en ejemplo:

Si conecto dos asterisk con TLS esto no significa que el mismo tipo de trasporte se usará entre asterisk y los clientes; tienes que definirlo para cada extension y instalar el certificado en los computadores donde estén instalados los clientes.

Cambiando de tema, se te agradecería una pequeña guía sobre SRTP y Asterisk.
Saludos

Guia SRTP

En cuanto tenga un rato, ahora estoy intentando terminar por fin el proyecto, te paso una guía.

Un saludo

Ahora que mencionas lo del

Ahora que mencionas lo del tráfico TLS, efectivamente solo lo tenía entre clientes y servidor asterisk, y obviamente me interesa tenerlo todo con TLS.

Entiendo que en la configuración de las centralitas en el sip.conf deberé poner:
transport=tls
port=5061

pero con esto no me basta, puesto que me dice que la conexión es a través de UDP y se requiere TLS. ¿Cómo indicar el certificado de cliente en linux a la centralita Asterisk?

Un saludo y gracias

tls dos centralitas

Si estas hablando de como conectar dos centralitas asterisk con TLS te dejé una guía en un mensaje que encuentra entre los comentario a este articulo.

Si no la entiendes bien coméntame.

Chao

Hola de nuevo, esto empieza a

Hola de nuevo, esto empieza a parecer un foro, pero me está sirviendo de mucha ayuda.

El caso es que sí que vi la guía, pero lo que interpreto de ella es que solo una de ellas se va a registrar respecto a la otra con TLS. El problema viene porque compruebe que cuando establezco las llamadas en una dirección todos los mensajes SIP van con TLS, pero cunado la llamada es en dirección contraria van sin TLS por lo que no obtengo un canal cifrado en todos los sentidos.

El caso es que no me deja registrar las dos centralitas entre ellas, en ese caso, al llamar me dice que hay CONGESTION.

Un saludo y gracias por las respuestas

Telenovela TLS :)

Creo un certificado CA y dos certificados para cada centralita "firmados" con el certificado CA.

Centralita A: Common name 192.168.0.101
Centralita B: Common name 192.168.0.100

En las dos pongo:

Centalita A:

[general]
tlsenable=yes
tlscertfile=/etc/asterisk/asterisk.pem
tlscafile=/etc/ssl/ca.pem ; This is the CA file used to generate both certificates
register => tls://100:test@192.168.0.100:5061

Centralita B:

[general]
tlsenable=yes
tlscertfile=/etc/asterisk/asterisk.pem
tlscafile=/etc/ssl/ca.pem ; This is the CA file used to generate both certificates
register => tls://200:test@192.168.0.101:5061

Configuro las dos extensiones en las dos centraltas...

Centralita A:
[200]
type=friend
context=internal
host=192.168.0.100
secret=test
dtmfmode=rfc2833
disallow=all
allow=ulaw
transport=tls
port=5061

Centralita B:
[100]
type=friend
context=internal
host=192.168.0.101
secret=test
dtmfmode=rfc2833
disallow=all
allow=ulaw
transport=tls
port=5061

Que dices, funciona?

TLS asterisk-Asterisk

Hola también estoy implementando TLS en el enlace entre asterisks
tengo algunas preguntas al respecto
TLS funciona solo para los troncales SIP?
Funciona también para los troncales IAX2?
Se debe establecer uno de los dos servidores como entidad certificadora?

yo ya tengo funcionando SRTP mas TLS entre asterisk y terminal en mi caso phonerlite
pero entre servidores asterisk se ven paquetes UDP y IAX
tengo trixbox instalado en los dos servidores
y cuenta con un /etc/pki/tls/cert.pem que viene listo me sirve ese certificado?

esop saludos

Ya, pero aquí no estamos

Ya, pero aquí no estamos usando CA, al menos yo no lo he usado, quizá sea ese paso el que me falta...

Seguí los pasos que indicaste en la guía y entiendo que lo que tengo es un certificado autofirmado ¿no?

Un saludo

CA y TLS

Hay que crear el CA y luego firmar los certificado de cada centralita con ese CA.

Quizas esta guía te ayude:

http://sial.org/howto/openssl/ca/

El certificado de cada centralita difiere por el common name: en uno pondrás la IP de la centralita A en el otro la de la Centralita B.

Ahora no tengo posibilidad de hacer pruebas... pero espero que te funcione.

Chao

CA y TLS

Gracias por el enlace, esta tarde tengo pensado probarlo, aunque he intentado verlo y no funciona el enlace.

Un saludo

Enlace CA

A mi me funciona el enlace.

Hoy estaba pensando que ademas de todo lo que escribi creo que se necesite otra cosa:

En el servidor A hay que poner el certificado de servidor B y viceversa.

Chao

TLS

Tienes razón, el enlace ahora funciona, debió de estar temporalmente fuera de servicio.

He estado viendo el enlace que me pasaste y efectivamente te dice como crear una CA local y como generar el certificado que será *.cert, que entiendo que será el que se le pase a los clientes, pero falta el *.pem que será el certificado del servidor.

En tu última respuesta dices que hay que indicarle a los servidores los certificados de los otros, lo cual tiene sentido, pero ¿dónde y cómo?.

Quizá es que estoy un poco saturado hoy, pero no veo cómo configurarlo para que funciona.

Muchas gracias por tú esfuerzo y un saludo

Tls dos servidores

Por lo que entiendo de la guía en ingles que puse aquí solamente un servidor se registra via TLS con el otro pues se necesitan tres certificados:

el certificado CA que usaremos para firmar los dos certificados de los servidores

dos certificados (uno para cada servidor) firmados con el CA creado. Cada certificado tendrá que contener en Common Name la IP del servidor donde lo vamos a instalar. Cada certificado de cada servidor será compuesto por dos archivos:

servidorA.crt y servidorA.key
servidorB.crt y servidorB.key

Ahora creamos dos archivos pem (uno para cada servidor)

En asteriskA.pem copiaremos el contenido de servidorA.crt y servidorA.key
En asteriskB.pem copiaremos el contenido de servidorB.crt y servidorB.key

Usaremos el asteriskA.pem en el servidorA y asteriskB.pem en el servidor B.

Copiaremos el CA.crt en ambos servidores

Luego seguimos con la configuración que se muestra en la guía en ingles.

Desafortunadamente no puedo hacer pruebas porque no tengo dos servidores Asterisk a la mano :)
Chao

Suscribirse a Comentarios de "Asterisk 1.6 - Empezando a experimentar SIP-TLS" Suscribirse a VozToVoice - Todos los comentarios