Si vous êtes arrivé sur ce tutoriel, c'est que vous êtes probablement utilisateur de Gmail. Connaissez-vous la fonctionnalité de récupération des messages sur un autre compte, via connexion POP ? C'est dans l'onglet Comptes, rubrique récupérer les messages d'autres comptes. Vous indiquez là les données de connexion du compte à consulter via un serveur POP, et Gmail récupérera les messages toutes les 15 minutes environ, et les mettra dans la boite de réception.



Imaginez maintenant que le serveur POP à consulter vous appartienne, et que vous décidiez quels messages doivent être transmis à Gmail, autrement dit vous pouvez placer vous-même les messages dans la boite de réception Gmail, en les chiffrant avant, tant que vous y êtes...

Imaginez que votre serveur POP est également un client POP qui récupère les messages sur un autre compte vous appartenant, chez un autre fournisseur X beaucoup plus respectueux de la vie privée, dans votre pays par exemple. C'est ce qu'on appelle un proxy. Le proxy envoit à Gmail les messages reçus sur le serveur POP du fournisseur X. Tous les messages transitent par lui.



Si le proxy chiffre les messages à la volée durant le transfert, vous obtenez un proxy chiffrant transparent. Vos messages arrivant sur votre compte du fournisseur X sont transférés sous forme chiffrée dans la boite de réception Gmail. Et vous, vous n'avez rien à faire.

Les fichiers produits sont compatibles avec le format S/MIME supporté par de nombreux lecteurs de courrier (Outlook, Thunderbird,...), et sont lisibles sur Gmail avec le plugin Gmail/SMIME.

Pour résumer, vous avez besoin :

  1. d'un compte mail accessible en POP chez un fournisseur X
  2. d'une plate-forme Linux connectée en permanence à internet, avec une IP fixe ou une adresse DNS, qui jouera le rôle de proxy transparent chiffré.



Mise en place du proxy

Le proxy est composé de deux applications. La première est un proxy POP modulaire, p3scan, que vous devez installer. La seconde est le module de chiffrement de ma composition, progammé en shell, et utilisant openssl et coreutils.

Configuration du proxy

Au début du script de chiffrement, vous devez renseigner la variable MY_PUBLIC_KEY avec le chemin du fichier contenant votre clé publique de chiffrement.
Vous devez également renseigner les paramètres de /etc/p3scan/p3scan.conf :

targetip = IP du serveur POP du fournisseur X
targetport = 110
scannertype = bash
scanner = /chemin/vers/chiffre_mail.sh

p3scan écoute sur le port 8110 par défaut, mais vous pouvez changer cette valeur dans le fichier p3scan.conf (j'ai mis 995).

Démarrer p3scan.

Création et installation des clés de chiffrement

On commence par générer la paire de clés RSA de 2048 bits. On ne protégera pas la clé privée par un mot de passe.

Nous initialisons le générateur de clé d'openssl avec une graine de 1024 caractères tirés de /dev/random.

$ mkdir -p ~/ssl
$ mkdir -p ~/ssl/private
$ chmod 700 ~/ssl/private
$ cd ~/ssl/private
$ head -c 1024 /dev/random > seed_rsa
$ openssl genrsa -rand seed_rsa -out chiffrement_priv.key -aes256 2048
1024 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
...................+++
.....+++
e is 65537 (0x10001)
Enter pass phrase for chiffrement_priv.key:
Verifying - Enter pass phrase for chiffrement_priv.key:
$

On supprime le mot de passe

$ openssl rsa -in chiffrement_priv.key -out chiffrement_priv.key
Enter pass phrase for chiffrement_priv.key:
writing RSA key
$

On extrait la clé publique dans un fichier à part

$ openssl rsa -pubout -in chiffrement_priv.key -out ../chiffrement_pub.key
writing RSA key
$

C'est le chemin du fichier chiffrement_pub.key qu'il faut mettre dans la variable MY_PUBLIC_KEY.

Fabrication du certificat

Pour lire nos messages, nous avons besoin d'un certificat de type pkcs12 à importer dans l'application (Thunderbird, Outlook, Gmail S/MIME,...). Nous allons produire un certificat auto-signé pour simplifier au maximum l'opération.

$ openssl req -new -x509 -days 3650 -key chiffrement_priv.key -out your_email@gmail.com.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-
Country Name (2 letter code) FR:
State or Province Name (full name) :
Locality Name (eg, city) :
Organization Name (eg, company) :
Organizational Unit Name (eg, section) :
Common Name (eg, YOUR name) :your_email@gmail.com
Email Address :
$

Nous obtenons un certificat au format PEM que nous transformons en certificat PKCS#12 :

$ openssl pkcs12 -export -in your_email@gmail.com.pem -inkey chiffrement_priv.key -out ../your_email@gmail.com.p12
Enter Export Password:
Verifying - Enter Export Password:
$

Le certificat your_email@gmail.com.p12 doit être importé dans votre outil de lecture de mail préféré.

Paramétrage de Gmail

Dans la gestion des paramètres de votre compte Gmail, ouvrez l'onglet Comptes puis la rubrique récupérer les messages d'autres comptes. Indiquez l'adresse IP de votre proxy, ou son adresse DNS, ainsi que le port d'écoute de votre proxy. Pour les identifiants de connexion, indiquez ceux de votre compte chez le fournisseur X (login et mot de passe).



Test

Envoyez un email à vous-même sur votre adresse chez le fournisseur X, et surveillez l'historique des connexions de récupération des messages sur votre interface Gmail. Au bout de quelques minutes, vous verrez apparaître votre message dans la boite de réception Gmail.

Mise en production

Si le test est concluant, vous pouvez maintenant chiffrer l'ensemble des messages à venir, de deux façons différentes :

  1. Vous oubliez votre adresse Gmail et n'utilisez plus que votre adresse chez le fournisseur X pour communiquer. Vos correspondants utiliseront automatique cette adresse.
  2. Vous établissez une règle de transfert permanent de tout vos messages de Gmail vers l'adresse du fournisseur X, avec suppression de l'original. Ceci est beaucoup moins sûr car Gmail conserve une copie de l'original non chiffré dans la corbeille pendant 30 jours.