Probando el soporte SRTP de Asterisk

Si ayer comentaba un poco el jaleo del SRTP opcional, hoy vamos a probar soporte SRTP de Asterisk.

Que no se asuste nadie, Asterisk todavía no soporta SRTP, ni siquiera en trunk, así que vamos a probar un branch en el que se está desarrollando el soporte de SRTP. Cabe destacar que nos encontramos ante la que tal vez sea la incidencia no resulta más antigua del bugtracker de Digium ¡va para 5 años! Como os podréis imaginar la incidencia está llena de notas que ya no sirven y añaden confusión al asunto… por eso escribo esto. 😉

Parece que por fin se lo han tomado en serio en Digium y Terry Willson está siendo el encargado de añadir esta funcionalidad que formará parte de Asterisk 1.8.

IMPORTANTE: Aunque utilicemos SIP sobre TLS para señalización y SRTP para media NO tenemos garantizada la encriptación de la señalización de extremo a extremo, por lo que la única manera de tener el RTP seguro es utilizar ZRTP.

Y sin más preámbulos, nos remangamos y ¡a compilar!

1. Instalar libSRTP

Es necesario compilar esta librería de una forma específica, ya que es necesario indicar unos flags para que Asterisk pueda enlazarla correctamente (-fPIC), así que tenemos que compilarla a mano:

wget http://srtp.sourceforge.net/srtp-1.4.2.tgz
tar zxvf srtp-1.4.2.tgz
cd srtp
autoconf
CFLAGS="-Wall -O4 -fexpensive-optimizations -funroll-loops -fPIC" ./configure
make
make install

2. Instalar Asterisk con soporte para SRTP

Tenemos que instalar el branch que se indica en la incidencia del bugtracker de Digium:

svn co http://svn.asterisk.org/svn/asterisk/team/group/srtp_reboot asterisk-srtp
cd asterisk-srtp
./configure
make menuselect
(comprobamos que res_srtp se encuentra habilitado)
make && make install
make samples

3. Configuración

Una vez tenemos Asterisk con soporte para SRTP instalado podemos empezar ha hacer pruebas. Para ello utilizaremos la siguiente configuración:

sip.conf
[saghul]
type=friend
secret=1234
context=test-srtp
host=dynamic
disallow=all
allow=alaw
encryption=yes

extensions.conf
[test-srtp]
exten => 1234,1,NoOp
exten => 1234,n,Answer
exten => 1234,n,Playback(demo-congrats)
exten => 1234,n,Hangup

Llamamos al 1234 y obtendremos este maravilloso SDP como respuesta:
SIP/2.0 200 OK
Via: SIP/2.0/UDP ...
From: "saghul" ;tag=jziCJERZJx5yWuqJ6be.Nsovxw6C-95.
To: ;tag=as5c0e6e41
Call-ID: U.kCq9Jk-6Zfg2kBg1qCb5wYI09voGj-
CSeq: 28567 INVITE
Server: Asterisk PBX SVN-group-srtp_reboot-r262249-/trunk
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Contact:
Content-Type: application/sdp
Content-Length: 379

v=0
o=root 1054633509 1054633509 IN IP4 192.168.99.53
s=Asterisk PBX SVN-group-srtp_reboot-r262249-/trunk
c=IN IP4 192.168.99.53
t=0 0
m=audio 17064 RTP/SAVP 8 101
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:5jjBwNWl/zUCvBBJGqLLABLAc2/83XQW0WkDzdUx

¡Funciona! Actualmente solo está soportado el modo mandatory de SRTP, así que el modo opcional en que indicamos RTP/AVP en la línea m y las claves en los atributos crypto no funcionará. Veremos si lo soportan o no.

Además del parámetro encryption=yes en el sip.conf, podemos indicar si queremos encriptación a nivel de señalización o de media con la función CHANNEL:

Set(CHANNEL(secure_bridge_signaling)=yes)
Set(CHANNEL(secure_bridge_media)=yes)

Os animo a los que tengáis terminales con soporte SRTP a probar el branch, happy encrypting!

phone_srtp

3 thoughts on “Probando el soporte SRTP de Asterisk

  1. Yo proble el branch y los parches que habia en mantis hace 3 o 4 años y aquello era petardazos por todos los lados. TEngo que echarle unas pruebas a ver si ahora está mejor la cosa

  2. Ese Saghulismo :D) Viene de puta madre esto!
    Yeahh 🙂

    Ya te contaremos las andanzas

    dale caña por ahí

    ciao

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *