Ir al contenido principal

Asterisk con WebRTC, TLS, libsrtp

 

Cześć !!

En esta ocasión vamos a explicar cómo configurar Asterisk para que desde un teléfono web podamos sacar y recibir llamadas. Se usará los siguientes componentes de Asterisk:
  • libsrtp
  • tls
  • Asterisk module http
Antes que nada debemos tener un teléfono web(obviamente), en el laboratorio vamos a usar Sipml5 en el siguiente link : https://www.doubango.org/sipml5/call.htm

El siguiente paso es instalar libsrtp del enlace: https://github.com/cisco/libsrtp .

#git clone https://github.com/cisco/libsrtp.git
#cd libsrtp
#./configure
#make && make install

Luego verificamos tener los siguientes módulos activos para compilar en menuconfig de Asterisk:
  • res_crypto
  • res_http_websocket
  • res_srtp
Comunmente si res_crypto no está selecionable, le falta la dependencia openssl-devel o su equivalente dependiendo del sistema que tengan. Cuando estemos seguros que están cargados en Asterisk continuamos con la instalación de los certificados locales(Si usa Lets'encrypt omitir la generación de certificados), para esto usaremos un script que viene incluido dentro del código fuente, este pedirá un password 3 veces, por lo que se lo damos. Se usa de la siguiente manera:

#mkdir /etc/asterisk/keys
#contrib/scripts/ast_tls_cert -C asterisk.mydomain.com -O "My Super Company" -d /etc/asterisk/keys

Seguimos con el modulo http de Asterisk. Editamos el archivo http.conf con los siguientes parametros:

[general]
bindaddr=0.0.0.0
enabled=yes
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/asterisk.pem

si usamos LetsEncrypt usamos los certificados así:

tlscertfile=/etc/letsencrypt/archive/example1.com/fullchain1.pem
tlsprivatekey=/etc/letsencrypt/archive/example1.com/privkey1.pem


reiniciamos asterisk y verificamos que esté funcionando http ahora:

#asterisk -rx "http show status"
HTTP Server Status:
Prefix:
Server: Asterisk/13.38.1
Server Enabled and Bound to 0.0.0.0:8088

HTTPS Server Enabled and Bound to 0.0.0.0:8089

Enabled URI's:
/httpstatus => Asterisk HTTP General Status
/phoneprov/... => Asterisk HTTP Phone Provisioning Tool
/ari/... => Asterisk RESTful API
/ws => Asterisk HTTP WebSocket

Enabled Redirects:
   None.

Y visitamos la url ssl del servicio(8089) para aceptar el certificado en nuestro navegador: https://ip-server:8089/ws si no hacemos este paso nunca tendremos conexión desde el softphone(no aplica si el certificao es oficial o LetsEncrypt). Agregamos una extensión sip con los siguientes parametros:

[100]
host=dynamic
secret=100
context=from-internal
type=friend
encryption=yes
rtcp_mux=yes
transport=udp,ws,wss
avpf=yes
force_avp=yes
icesupport=yes
directmedia=no
disallow=all
allow=ulaw
dtlsenable=yes
dtlsverify=fingerprint
dtlscertfile=/etc/asterisk/keys/asterisk.pem
dtlscafile=/etc/asterisk/keys/ca.crt
dtlssetup=actpass
rtcp_mux=yes

*Si usamos LetsEncrypt configuramos los certificados de la siguiente manera:

dtlscertfile=/etc/letsencrypt/live/example1.com//fullchain.pem
dtlscafile=/etc/letsencrypt/live/example1.com//chain.pem

Recargamos y listo. Vamos a la última etapa con el web phone sipml5. Damos clic en el boton «expert mode» y colocamos la ip del server como en la imagen:


Por último colocamos los datos correspondientes, y clic en login. Si todo sale bien veran «connected» en la parte superior.


Espero les sea útil. Do widzenia


Comentarios