Asterisk – Chiffrement des Appels

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 :

  • : 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 :

Asterisk certificats

 

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
  • : permet de spécifier le dossier de sortie
  • : permet de choisir le nom de la clé à créer

 

Nous retrouvons 4 nouveaux fichiers :

Asterisk certificats client

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 :

Asterisk certificats client

Voici la configuration à appliquer pour Blink :

Ajouter l’adresse du serveur Asterisk comme proxy, spécifier le port 5061 et forcer le TLS.

Blink TLS Configuration

 

Renseigner le chemin du fichier PEM (certificat + clé privée du client).

Blink TLS Configuration

 

Puis renseigner le chemin du fichier ca.crt.

Blink TLS Configuration

 

A présent, la signalisation de l’appel devrait être chiffrée (petit cadenas bleu dans Blink).

Blink TLS Test

 

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 :

Blink RSTP Configuration

A présent, le flux audio est lui aussi chiffré.

Dans la fenêtre de Blink, un cadenas orange devrait apparaitre.

Blink RSTP Test

 

 

Tagués avec : , ,
Publié dans Sécurité
11 commentaires pour “Asterisk – Chiffrement des Appels
  1. yassir dit :

    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.

    • Valentin Weber dit :

      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 ?

      • zaak dit :

        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

        • Valentin Weber dit :

          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.

  2. ndiaye dit :

    bonjour. est ce qu’on peut utiliser srtp pour sécuriser les flux échangés entre deux serveurs asterisk

  3. Clement dit :

    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

  4. Clement dit :

    Bonjour et merci pour ta réponse.

    aurais-tu un autre client à me conseiller ?

    Merci d’avance

    Clément

  5. Abdou Aziz dit :

    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

    • Valentin Weber dit :

      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.

Répondre à Valentin Weber Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Le temps imparti est dépassé. Merci de saisir de nouveau le CAPTCHA.