Nous sommes dans le cadre du standard S/MIME avec 2 clés: une pour la signature et l’autre pour le cryptage.
Principe général
L’expéditeur veut être sûr que son message ne sera pas modifié pendant le transfert (internet n’est pas sûr…) Et que seul le destinataire pourra lire le message.
On recherche donc l’authenticité et la confidentialité.
- Signature : l’expéditeur signe le message avec sa clé privée.
- Cryptage : après avoir signé le message, l’expéditeur le crypte avec la clé publique du destinataire.
Outils
Java SE contient désormais les extension cryptographique mais l’API optionnelle JavaMail ne prend pas en charge la sécurité. Le programmeur doit donc transformer le message en clair en le passant en « multipart » pour y insérer la signature puis crypter les différentes parties et gérer les entêtes du mail pour indiquer au destinataire qu’il s’agit d’un mail crypté et signé.
JavaMail
La version courante 1.4.3 permet d’envoyer un mail en se connectant à un serveur SMTP. Nous utilisons en également les capacités de JavaMail à gérer les pièces jointes ainsi que les entêtes du mail.
Javamail-crypto
Cette librairie permet d’ajouter à JavaMail la prise en charge du S/MIME. JavaMail-Crypto s’appuie sur 2 founisseurs d’implémentation: BouncyCastle pour SMIME et Cryptix pour PGP. Seul le premier sera utilisé dans notre cas.
OpenSSL
OpenSSL est une librairie et des outils pour créer des clés et certificats cryptographique et les manipuler dans un contexte pratique (chriffrage…). Disponible sur tous les Unix il est également utilisable avec Cygwin (pour ceux qui sont du côté obscure…)
Tags: Cryptographie Java JavaMail S/MIME