Asterisk webrtc let’s encrypt WSS websocket server
Per iniziare semplificando i concetti, per poi addentrarci in una spiegazione più tecnica, questo articolo spiega come attivare un telefono IP software all’interno di una pagina web e far si che si registri su di una centrale telefonica remota attraverso internet, questo consentirà a chi aprirà la pagina di utilizzare il PBX remoto esattamente come fosse un interno locale.
Questo tipo di configurazione asterisk webrtc può dar vita a:
- un sistema di call-center senza costi di linee telefoniche ( ad esempio per fornire supporto in acquisto agli acquirenti ,real time , in un e-commerce)
- servizi di acquisizione letture per utility gas-luce-energia come quello attivato nel buttone posto nel link ad inzio articolo
- effettuare una telefonata ad un qualsiasi interno (o numero esterno perchè no? ) come se si fosse nella rete di appartenenza del centralino.
- qualsiasi cosa vi venga in mente per consentire agli utenti della vostra pagina di comunicare con voi o con i vostri servizi automatici
Asterisk e webrtc mettono un vero e proprio telefono nella vostra pagina web collegato al vostro centralino telefonico
Vai qui per visitare la pagina che integra il progetto e clicca su apri per far apparire in finestra il telefono software ( previo assenso di condivisione/utilizzo del microfono).
Asterisk ormai dalla versione 11 supporta webrtc e le connessioni real time tramite browser, e, dalla versione 13, lo sviluppo appare maturo e testabile, con tutte le cautele, in produzione. Supportare webrtc significa consentire ad un client SIP remoto di utilizzare il websocket come mezzo di trasmissione per instaurare una connessione cifrata (TLS) al vostro centralino Asterisk.
In questo tutorial andremo ad effettuare:
- installazione Centos 7
- Asterisk 13 con supporto TLS – webrtc
- creazione e configurazione di un certificato SSL da https://letsencrypt.org/ per l’utilizzo (obbligatorio ) di una connessione sicura WSS.
Quando utilizziamo WSS come protocollo di trasporto Chrome e Firefox di default non consentiranno la connessione ad un server remoto mediante un certificato auto-firmato (come si trova spiegato nella maggior parte dei tutorial) , noi opteremo quindi per un certificato SSL riconosciuto internazionalmente Let’s Encrypt.
La configurazione di un sistema del genere presuppone un livello di conoscenze almeno di medio livello sia per Linux CentOS che Asterisk, per cui di alcuni passaggi si forniranno solamente link informativi per il loro espletamento.
- res_http_websocket perchè è il modulo creato per consentire alle librerie javascript di interagire e comunicare con asterisk
- res_crypto per le comunicazioni SSL
- chan_sip per ovvie ragioni
enabled=yes
bindaddr=0.0.0.0
bindport=8088
tlsenable=yes
tlsbindaddr=0.0.0.0:8089
tlscertfile=/etc/asterisk/keys/fullchain.pem
tlsprivatekey=/etc/asterisk/keys/privkey.pem
realm= <il vostro ip pubblico>
transport=tcp,udp,ws,wss
tlscipher=ALL
nat=yes
host=dynamic
secret=password
context=interni
type=peer
encryption=yes
avpf=yes
icesupport=yes
directmedia=no
rtcp_mux=yes
transport=ws,wss,udp
directmedia=no
disallow=all
allow=ulaw,opus,vp8,h264
nat=yesdtlsenable=yes
dtlssetup=actpassdtlscertfile=/etc/asterisk/keys/fullchain.pem
dtlsprivatekey=/etc/asterisk/keys/privkey.pem
[6002]
host=dynamic
secret=6002
context=interni
type=peer
transport=ws,wss,udp
directmedia=no
disallow=all
allow=all
Connected to Asterisk 13.23.0 currently running on localhost (pid = 1212)
localhost*CLI> http show status
HTTP Server Status:
Prefix:
Server: Asterisk/13.23.0
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
/static/… => Asterisk HTTP Static Delivery
/ari/… => Asterisk RESTful API
/ws => Asterisk HTTP WebSocket
Enabled Redirects:
None.
Indispensabile per prevenire le eventuali problematiche di connettività dovute a firewall, NAT e simili , la configurazione del protocollo ICE, che utilizza server STUN e/o TURN a cui si rimanda al link per comprensione, ed è un’addon alle API del motore RTP che offre un’interaccia per il suo utilizzo all’interno della sessione RTP.
Il supporto per l’utilizzo del protocollo ICE si abilita in rtp.conf di cui sotto è fornito un esempio,
================================================
[root@localhost asterisk]# cat rtp.conf
[general]
rtpstart=10000
rtpend=10255
icesupport=yes
stunaddr=stun.l.google.com:19302
=================================================
All’interno di res_stun_monitor.conf aggiungere o sostituire la riga che definisce l’indirizzo di un server STUN.
stunaddr = stun.l.google.com:19302
=========================================================
Per verificare la corretta configurazione si può digitare dalla console di Asterisk -> stun show status
[root@localhost asterisk]# asterisk -r
Connected to Asterisk 13.23.0 currently running on localhost (pid = 1381)
localhost*CLI> stun show status
Hostname Port Period Retries Status ExternAddr ExternPort
stun.l.google.com 19302 30 3 OK 185.226.5.23 47829