Préambule
Il est possible dans Zimbra de signer/encrypter ses messages grâce a la Zimlet disponible dans le version Network. Une autre Zimlet utilisant PGP est disponible mais je ne vais pas utiliser celle-ci pour la suite de cet article.
Dans mon cas j’aimerai signer et surtout encrypter mes mails a destination des personnes de mon entreprise, sans avoir a récupérer la clef publique de tous les utilisateurs. L’idée ici est donc d’utiliser l’annuaire pour stocker les clefs publiques de mes utilisateurs.
Cela peut être fait de deux façon, soit en passant par un annuaire externe qui contient les utilisateurs et leurs certificats (on imagine très bien un Active Directory par exemple), ou bien en injectant directement dans Zimbra la clef publique.
Je vais expliquer la deuxième option, car je suis en attente de mon matériel pour faire un lab digne de ce nom et n’ai que très peu de mémoire sur mon portable pour faire tourner convenablement un OpenLDAP/AD plus Zimbra.
Scénario
Le scénario est le suivant :
Users :
- User1@demo.local
- User2@demo.local
Zimbra version 8.5 (fonctionne aussi en 8.0)
Generation du certificat
Le certificat doit etre au format DER comme expliqué dans ce bug de Zimbra.
On va donc générer le certificat ainsi qu’une clef privée par utilisateur. Dans votre cas il est préférable de vous appuyer la clef privée de votre PKI d’entreprise plutôt que de créer une clef par utilisateur.
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout user1.key -out user1.crt openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout user2.key -out user2.crt
export de la clef au format DER :
openssl x509 -in user1.crt -outform DER -out user1.der openssl x509 -in user2.crt -outform DER -out user2.der
Et enfin export de la clef au format PKCS12 pour import dans le navigateur de l’utilisateur
openssl pkcs12 -export -out user1.p12 -in user1.crt -inkey user1.key openssl pkcs12 -export -out user2.p12 -in user2.crt -inkey user2.key
Transferer-les sur votre serveur Zimbra avec votre outil preferé puis importez les dans chaque compte avec la commande suivante :
su - zimbra zmprov ma user1@demo.local userCertificate /tmp/user1.der zmprov ma user2@demo.local userCertificate /tmp/user2.der
Enfin,on regénère la GAL pour que le changement soit effectif de suite.
su - zimbra zmgsautil forceSync -a galsync.@demo.local -n InternalGAL (valeur par default à adapter à votre environement)
Import du certificat dans le navigateur (ici Firefox)
Maintenant que coté serveur on a les certificats dans l’annuaire, il faut maintenant que l’utilisateur importe son certificat dans le navigateur. Pour Firefox il faut faire comme suit :
- Dans les preferences de Firefox cliquer sur Advanced -> Certificates -> View certificates
- Puis on clic sur import
- et enfin on choisi son certificat.
On pourrais croire que c’est fini mais non. La Zimlet s’appuyant sur Java, il faut aussi intégrer le certificat dans le keystore de Java.
Import du certificat dans le Keystore Java
On lance donc le panneau de commande Java puis :
- On clic sur security -> Manage certificate
- Puis import et on importe le certificat
A partir de cet instant, on peu envoyer des messages signés a des destinataires inconnu et aussi envoyer des mails cryptés aux utilisateurs de la plateforme Zimbra (ici un screenshot de l’annuaire global) :
Et la l’envoi du mail crypté :
Easy !
PS : N’oubliez pas d’activer la zimlet smime sinon rien de tout cela fonctionne…