La sécurisation des appels peut être intéressante à mettre en place, afin de protéger nos appels téléphoniques.
Nous pouvons chiffrer le flux de signalisation ainsi que le flux audio.
De cette manière, nous pouvons assurer la confidentialité.
1) Chiffrage SIP avec TLS
Pour sécuriser les appels, il nous faut chiffrer deux choses :
- Le flux SIP (la signalisation)
- Le flux RTP (la voix)
Commençons donc par le flux SIP.
Pour cela, nous allons faire appel au protocole TLS – Transport Layer Security.
Tout d’abord, il va nous falloir créer des clés pour Asterisk et les clients profitant du chiffrement.
Ensuite, nous devrons autoriser Asterisk à utiliser TLS pour les échanges SIP, puis nous devrons choisir les clients à sécuriser.
Enfin, il faudra activer le chiffrement sur le poste de client, et lui fournir les fichiers de clé.
Commençons donc par générer les clés.
Pour cela, nous créons un dossier qui contiendra les clés.
mkdir /etc/asterisk/keys
Le script permettant de créer les clés se trouve dans le dossier suivant :
cd /usr/src/asterisk/asterisk-12.0.0/contrib/scripts/
Le script s’exécute comme ceci :
./ast_tls_cert -C asterisk.networklab.com -O "NetworkLab" -d /etc/asterisk/keys
Voici le détail des options :
- C : permet de spécifier le nom d’hôte du serveur Asterisk. A défaut d’un nom, vous pouvez spécifier une IP.
- O : permet de définir le nom de l’organisation
- d : permet de spécifier le dossier de sortie
A l’exécution du script, il vous sera demandé de spécifier le mot de passe des fichiers.
Retenez bien le mot de passe entré pour chaque fichier, ou à défaut, utilisez le même à chaque fois.
Les fichiers suivants devraient être créés :
Nous avons donc un certificat self-signed pour l’autorité de certificat, et un certificat pour le serveur Asterisk.
Nous avons aussi une clé privée pour l’autorité de certificat et une pour Asterisk.
Les fichiers PEM regroupent la clé privée et le certificat.
Les fichiers CSR sont des fichiers de requête de certificat (nous n’en avons pas besoin).
A présent, nous devons créer les clés et certificats pour les clients.
./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C phone101.networklab.com -O "NetworkLab" -d /etc/asterisk/keys -o 101
Voici le détail des options :
- m : indique qu’il faut créer un certificat client
- c : permet de spécifier le chemin vers le certificat de l’autorité de certificat
- k : permet de spécifier le chemin vers la clé privée de l’autorité de certificat
- C : permet de spécifier le nom d’hôte du poste du client. Il est possible de spécifier une IP.
- O : permet de définir le nom de l’organisation
- d : permet de spécifier le dossier de sortie
- o : permet de choisir le nom de la clé à créer
Nous retrouvons 4 nouveaux fichiers :
L’opération est à répéter pour tous les clients devant bénéficier de TLS.
A présent, nous devons configurer Asterisk pour autoriser l’utilisation de TLS.
Dans le fichier sip.conf, apporter les modifications suivantes :
[general] tlsenable=yes tlsbindaddr=0.0.0.0 tlscertfile=/etc/asterisk/keys/asterisk.pem tlscafile=/etc/asterisk/keys/ca.crt tlscipher=ALL tlsclientmethod=tlsv1
Ensuite, nous devons autoriser les clients à utiliser TLS.
Dans le fichier users.conf, ajouter la ligne transport=tls pour tous les clients concernés :
[101](default_template) fullname = Alain Aldric username = aaldric secret=password mailbox = 101 context=dept_1 transport=tls
N’oubliez pas de relancer Asterisk une fois la configuration terminée.
Et enfin, nous pouvons configurer les postes des clients.
Pour cette démonstration, j’ai choisi d’utiliser le logiciel Blink.
Le client doit posséder 2 fichiers :
- ca.crt
- client.pem
Client 101 :
Voici la configuration à appliquer pour Blink :
Ajouter l’adresse du serveur Asterisk comme proxy, spécifier le port 5061 et forcer le TLS.
Renseigner le chemin du fichier PEM (certificat + clé privée du client).
Puis renseigner le chemin du fichier ca.crt.
A présent, la signalisation de l’appel devrait être chiffrée (petit cadenas bleu dans Blink).
2) Chiffrement RTP avec SRTP
A présent que la signalisation est chiffrée, il nous faut encore chiffrer le flux audio.
Pour cela, nous allons utiliser le protocole SRTP.
La première étape consiste à ajouter le support de SRTP à Asterisk.
Commençons par télécharger la librairie SRTP.
Vous trouverez le lien vers la dernière version à cette adresse : http://srtp.sourceforge.net/download.html
cd /usr/src/ wget http://srtp.sourceforge.net/srtp-1.4.2.tgz tar -xvzf srtp-1.4.2.tgz rm srtp-1.4.2.tgz
Procédons à l’installation :
cd srtp ./configure CFLAGS=-fPIC --prefix=/usr make make install
Pour qu’Asterisk prenne en charge SRTP, il nous faut le réinstaller.
cd /usr/src/asterisk/asterisk-12.0.0/ make clean ./configure make make install
Ensuite, charger le module SRTP dans Asterisk :
asterisk –rv module load res_srtp.so
A présent, il faut forcer l’utilisation de SRTP sur les clients voulus. Pour cela, ajouter la ligne encryption=yes chez les utilisateurs concernés dans users.conf.
[101](default_template) fullname = Alain Aldric username = aaldric secret=password mailbox = 101 context=dept_1 transport=tls encryption=yes
N’oubliez pas de relancer Asterisk une fois la configuration complète.
Nous pouvons à présent configurer le poste du client pour qu’il utilise SRTP.
Voici la configuration à appliquer dans Blink :
A présent, le flux audio est lui aussi chiffré.
Dans la fenêtre de Blink, un cadenas orange devrait apparaitre.
merci pour le tutoriel,
j’ai un probléme. lorsque j’ai appliqué le TLS dans asterisk . il me donne ce type d’erreur:
ERROR[10088]: chan_sip.c:15384 register_verify: ‘UDP’ is not a valid transport for ‘33002’. we only use ‘TLS’! ending call.
ç-a-d lorsque je remplace le transport=udp par transport=tls, les peers n’arrivent pas à s’enregistrer
merci.
Bonjour,
Attention, tous les clients SIP ne sont pas compatibles TLS. Lors de mes derniers tests, Blink supportait bien le TLS avec Asterisk.
Mais pour cela, il faut modifier les paramètres comme indiqué dans l’article.
Quel client SIP utilisez-vous. Celui-ci propose-t-il des paramètres spécifiques pour le TLS ?
Bonjour,
Moi aussi en utilisant SFLphone, en appliquant transport=tls ,les peers n’arrivent pas à s’enregistrer.
Par contre si transport = udp ,les peers arrivent bien à s’enregistrer .. Je comprend pas . Il faut utiliser Blink ?
Merci
Bonjour, je n’ai jamais essayé SFLphone, je ne sais pas si il supporte correctement le TLS.
Pour valider votre configuration, vous pouvez déjà essayer avec Blink en appliquant les mêmes paramètres que dans l’article.
bonjour. est ce qu’on peut utiliser srtp pour sécuriser les flux échangés entre deux serveurs asterisk
Bonjour,
Le protocole IAX permet de connecter deux serveurs Asterisk. Et il est possible de chiffrer le flux IAX.
Bonjour et merci pour votre tutoriel très clair.
En suivant votre tutoriel j’arrive parfaitement à configurer blink et à le faire enregistrer auprès de mon asterisk. Seulement lorsque j’effectue un test d’appels entrant et sortant (à partir ou vers un téléphone portable) je m’aperçois que l’interlocuteur m’entend très mais moi pas du tout.
Avez-vous une idée du problème ?
Je vous remercie,
Clement
Bonjour,
Je pense que le problème vient des paramètres de Blink.
A tester avec un autre client SIP.
Bonjour et merci pour ta réponse.
aurais-tu un autre client à me conseiller ?
Merci d’avance
Clément
Bonjour merci beaucoup j’ai pu configuré tls sur mon serveur asterisk. mais à la fin jai un petit problème disant « UDP is not a valid transport for ‘aziz’. we only use ‘TLS’! ending….. ».
Pourriez vous m’aider svp.
merci
Bonjour,
Je pense qu’il manque un paramètre dans la config du client SIP ou du poste téléphonique. Il faut activer le chiffrement et importer le certificat.