Histoire de bien démarrer l’année ; bonne année en passant 🙂 . J’ai pris un peu de temps afin d’ajouter la dernière documentation SOAP de Zimbra au format Docset.

Pour ceux qui ne connaissent pas, Docset est un format de documentation utilisé par les logiciel kapeli et zealdocs.
Ces logiciels permettent une lecture hors ligne de ces documentations et autres snippets. Pratique quand on se déplace régulièrement.
De nombreuse intégrations existes. On retrouve des connecteurs avec les IDE les plus populaires ; ATOM, PyCharm, etc. Ceux-ci permettant une recherche de la documentation d’une fonction directement depuis l’IDE.

Je ne sais pas quand la version 8.8 de la documentation sera disponible, mais je l’ajouterai quand elle sera publique.

Pour ceux qui utilisent Dash la documentation est déjà disponible dans la section « User Contribution », pour les autres l’intégration est expliqué dans le Readme du repostiory github.

Cela faisait longtemps une éternité que je n’avais pas écrit un billet.
Je profite d’avoir enfin un peu de temps pour le faire.

J’était tombé sur l’article de Jorge permettant de créer des comptes de démonstration sur Zimbra en utilisant un script.
Hormis le fait que Zimbra propose déjà cette option par défaut :

zmprov createBulkAccounts(cabulk) {domain} {namemask} {number of accounts to create}

le fait de passer par un fichier intermédiaire et de devoir modifier le script pour l’adapter rend la solution, a mon sens, pénible.
Lire la suite de

La nouvelle version de Zimbra viens de sortir mais sa documentation coté API a quelque peu tardé à pointer le bout de son nez.
Il y quelques temps de cela, j’ai pris en charge de porter la documentation au format docset pour Dash et Zeal.

Vous pouvez donc à partir de maintenant, retrouver les documentations SOAP et Zimlet pour la 8.7 directement dans la section « User Contributed » dans Dash :
Dash-1

Et suivre le how-to du projet github pour Zeal.
D’ailleurs ne disposant pas de Windows/Linux avec GUI, si une âme charitable pouvais tester Zeal et me confirmer que cela fonctionne ça serait sympa.

English version.

Cette semaine je suis tombé sur un cas intéressant d’une mise à jour de Zimbra 7 vers Zimbra 8 qui, une fois la mise à jour effectuée, ne permettait plus d’accéder a l’interface utilisateur et administrateur même si tous les services était au vert au niveau CLI.

Commence alors l’analyse des logs et malheureusement ceux-ci ne fournissait pas d’informations pertinentes.
Lors d’une connexion, voici ce qui apparaissait dans /opt/zimbra/log/mailbox.log :

error while proxying request to target server: HTTP/1.1 404 Not Found.

Il n’y avait que dans le /opt/zimbra/log/zmmailboxd.out que quelque chose attira mon attention :

2016-06-16 06:04:22.754:WARN/service:unavailable
2016-06-16 06:04:23.754:WARN/service:unavailable
javax.servlet.UnavailableException: Other filter is using the same name: com.zimbra.cs.network.license.service.ImapLicenseFilter

A priori une autre librairie se charge et prend la place de /service ce qui a pour effet planter n’importe quel service ayant besoin de /service.
Et pour ceux qui connaissent Zimbra, l’intégralité du logiciel s’appuie sur cet URL 🙁

Évidemment google était à sec et la seule personne qui a eu le même problème n’a jamais eu de réponse.

Mais en En regardant de plus près les logs de démarrage, on peut voir que java charge une librairie inhabituelle :

2016-06-16 06:03:28,103 INFO  [main] [] extensions - extension com.zimbra.iminterop.ZimbraInteropExtension found in /opt/zimbra/lib/ext/zimbraiminterop/zimbraiminterop.jar

Il s’agit de la librairie de feu serveur XMPP intégré à Zimbra, hors cette brique a été retiré de Zimbra en version 8 mais pour quelconque raison, ici elle est toujours présente.

on supprime donc cette librairie :

rm /opt/zimbra/lib/ext/zimbraiminterop/zimbraiminterop.jar

puis on redémarre les services.

Après ça, j’ai bien mérité une bonne bière !

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 :

  1. Dans les preferences de Firefox cliquer sur Advanced -> Certificates -> View certificates
  2. Puis on clic sur import
  3. et enfin on choisi son certificat.

Zimbra-SMIME-1

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 :

  1. On clic sur security -> Manage certificate
  2. Puis import et on importe le certificat

Zimbra-SMIME-2

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

Zimbra-SMIME-3

Et la l’envoi du mail crypté :

Zimbra-SMIME-4

Easy !

PS : N’oubliez pas d’activer la zimlet smime sinon rien de tout cela fonctionne…

Je fait suite à mon précédent article sur l’intégration d’un certificat signé par la PKI Micorsoft au sein du serveur Apache.

On va ici effectuer une demande pour le webmail de Zimbra.

le scénario est le suivant :

  • ActiveDirectory 2008 R2 incluant la PKI
  • Un client Windows 2008 R2 intégré au domaine
  • Zimbra v8.0.7 sous CentOS 6.4 avec le paquet zimbra-proxy installé

Tout comme la demande pour Apache, il faut que le paquet OpenSSL soit installé.

On commence par créer la clef privé du serveur :

zimbra# openssl genrsa 2048 > /etc/pki/tls/private/zimbra.domain.tld.key

Puis on génère la requête :

zimbra# openssl req -new -key /etc/pki/tls/private/zimbra.domain.tld.key > /etc/pki/tls/private/zimbra.domain.tld.req
 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) [XX]:FR
 State or Province Name (full name) []:IDF
 Locality Name (eg, city) [Default City]:Paris
 Organization Name (eg, company) [Default Company Ltd]:Les Titans
 Organizational Unit Name (eg, section) []:
 Common Name (eg, your name or your server's hostname) []:zimbra.domain.tld
 Email Address []:admin@domain.tld
Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:

Une fois le fichier de requête transféré au serveur Windows, on va demander à la CA de créer un certificat :

windows# certreq -submit -attrib "CertificateTemplate:WebServer" zimbra.domain.tld.req

Zimbra-MPKI-01

a la différence de apache, il est obligatoire de concaténer le root CA avec le certificat du service. Il faut donc récupérer le certificat public de notre ADSC :

windows# certutil -ca.cert c:\users\administrator\Desktop\ca_root.crt

Zimbra-MPKI-02

une fois les deux certificats sur le serveur Zimbra, concaténez les deux via la commande suivante :

cat /etc/pki/tls/certs/zimbra.lab.rezo.local.crt /etc/pki/tls/certs/ca_root.crt > /etc/pki/tls/certs/complete_zimbra.lab.rezo.local.crt

Enfin aller dans l’interface web d’administration de Zimbra et copier-coller le contenu du certificat dans l’onglet configuration -> domaine -> domain.tld > Certificats (colone de gauche) et dans la colonne de droite la clef privé du serveur que nous avons créé auparavant et cliquer sur sauvegarder.

Zimbra-MPKI-03

Comme l’indique le popup, il faut effectuer une commande sur le serveur lui même afin de déployer ce nouveau certificat. Pour cela

mkdir /opt/zimbra/conf/domaincerts <- petit bug de Zimbra qui ne créer pas le repertoire si celui-ci n'existe pas
 chown zimbra:zimbra /opt/zimbra/conf/domaincerts
 /opt/zimbra/libexec/zmdomaincertmgr deploycrts
 su - zimbra
 zmnginxctl restart

enfin connectez-vous sur l’interface web depuis le client :

Zimbra-MPKI-04

et voila un beau webmail reconnu par votre navigateur