Site icon WolwX.net

Zimbra ZCS – Installer un certificat SSL gratuit Letsencrypt sur la webmail

Procédure pour installation d’un certificat SSL gratuit, avec LetsEncrypt, sur la webmail Zimbra.

Documentation officielle :

https://wiki.zimbra.com/wiki/Installing_a_LetsEncrypt_SSL_Certificate

Et dans la suite ma routine personnelle 🙂

1> Installer LetsEncrypt

Sur le serveur dédié hébergeant notre serveur mail, on doit installer LetsEncrypt.

L’installation de git sera peut être requise au préalable :

apt-get install git

Ensuite on clone letsencrypt depuis github :

git clone https://github.com/letsencrypt/letsencrypt

2> Générer un certificat multidomaines

On rentre dans le dossier et on lance la génération d’un certificat multidomaines

cd letsencrypt ./letsencrypt-auto certonly --standalone -d nomdedomaine1 -d nomdedomaine2 -d nomdedomaine3 -d nomdehostzimbra.fr

Point très important on doit impérativement mettre le nom de host de notre serveur zimbra dans la liste des nom de domaines du certificat, sous peine d’avoir un problème de démarrage de Ldap de ce genre :

Host nomdehostzimbra.fr Starting ldap...Done. Unable to start TLS: hostname verification failed when connecting to ldap master.

Bon une fois la commande avec la longue liste de domaine lancée, on patiente un peu, d’autant plus si c’est la première fois qu’on lance Letsencrypt sur ce dédié, car il y à pas mal de dépendances qui seront installées :

python est déjà la plus récente version disponible.
ca-certificates est déjà la plus récente version disponible.
openssl est déjà la plus récente version disponible.
Les paquets supplémentaires suivants seront installés :
  binutils cpp cpp-4.8 gcc-4.8 libasan0 libatomic1 libc-dev-bin libc6-dev
  libcloog-isl4 libexpat1-dev libgcc-4.8-dev libgomp1 libisl10 libitm1 libmpc3
  libmpfr4 libpython-dev libpython2.7-dev libquadmath0 libtsan0 linux-libc-dev
  python-setuptools python2.7-dev zlib1g-dev
Paquets suggérés :
  augeas-doc binutils-doc cpp-doc gcc-4.8-locales gcc-multilib make
  manpages-dev autoconf automake1.9 libtool flex bison gdb gcc-doc
  gcc-4.8-multilib gcc-4.8-doc libgcc1-dbg libgomp1-dbg libitm1-dbg
  libatomic1-dbg libasan0-dbg libtsan0-dbg libquadmath0-dbg augeas-tools
  glibc-doc
Paquets recommandés :
  libssl-doc python-pip
Les NOUVEAUX paquets suivants seront installés :
  augeas-lenses binutils cpp cpp-4.8 gcc gcc-4.8 libasan0 libatomic1
  libaugeas0 libc-dev-bin libc6-dev libcloog-isl4 libexpat1-dev libffi-dev
  libgcc-4.8-dev libgomp1 libisl10 libitm1 libmpc3 libmpfr4 libpython-dev
  libpython2.7-dev libquadmath0 libssl-dev libtsan0 linux-libc-dev python-dev
  python-setuptools python-virtualenv python2.7-dev zlib1g-dev
0 mis à jour, 31 nouvellement installés, 0 à enlever et 1 non mis à jour.
Il est nécessaire de prendre 42,9 Mo dans les archives.

Puis on patiente toujours un peu pour que Letsencrypt finisse le job.
On aura le droit à 3 questions, la première super importante est celle de renseigner une adresse email qui sera utilisée pour vous envoyer des notifications de fin de période de validité pour votre certificat. Vue le délais court des certificats gratuit de Letsencrypt (3 mois) il vaut mieux ne pas ce louper avec cette adresse email et faire bien attention à ces notifications pour renouveler le certificat quand il sera nécessaire.
Les 2ème et 3ème questions sont plus basique, accord d’utilisation, et notification commercial et sécuritaire de la part de letsencrypt.

Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): votreboiteemail@votredomaine.fr

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for nomdedomaine1
http-01 challenge for nomdedomaine2
http-01 challenge for nomdedomaine3
http-01 challenge for nomdehostzimbra.fr
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/nomdedomaine1.fr/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/nomdedomaine1.fr/privkey.pem
   Your cert will expire on 2019-02-28. To obtain a new or tweaked
   version of this certificate in the future, simply run
   letsencrypt-auto again. To non-interactively renew *all* of your
   certificates, run "letsencrypt-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Voilà donc notre certificat est prêt est il est présent dans le dossier mentionné /etc/letsencrypt/live/nomdedomaine1.fr/

3> Adapter le certificat à l’utilisation de Zimbra

Petite opération nécessaire à l’utilisation du certificat Letsencrypt, il faut lui joindre root CA.

On va donc modifier notre fichier chain.pem en incluant le certificat root CA.
Dans la première partie du fichier on retrouvera notre certificat, auquel on va joindre la seconde partie de manière à ce que le certificat final ressemble à ceci :

# nano /etc/letsencrypt/live/nomdedomaine1.fr/chain.pem

-----BEGIN CERTIFICATE-----
VOTRECERTIFICATICI
AVECCODELONGQUICONTINUEBIENSUR
SURPLUSIEURSLIGNE
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----

Le certificat root CA est le même pour tous, alors que votre certificat dans la partie supérieur sera différent.

4> Installer le certificat sur Zimbra

On va copier coller tous les fichiers générés vers un nouveau dossier SSL :

# mkdir /opt/zimbra/ssl/letsencrypt
# cp /etc/letsencrypt/live/nomdedomaine1.fr/* /opt/zimbra/ssl/letsencrypt/

Puis on change les droits propriétaire sur les fichiers :

# chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/*
# chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/

Avant déploiement de notre certificat on vérifie qu’il est bien valide avec l’utilisateur zimbra :

# su zimbra
# cd /opt/zimbra/ssl/letsencrypt/
# /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem
** Verifying 'cert.pem' against 'privkey.pem'
Certificate 'cert.pem' and private key 'privkey.pem' match.
** Verifying 'cert.pem' against 'chain.pem'
Valid certificate chain: cert.pem: OK

On est ok mais au préalable on backup les certificats actuellement utilisés :

# cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")

On déplace notre clef dans le bon dossier :

# cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key

Et on retourne sur l’utilisateur zimbra pour procéder à l’installation :

# su zimbra
# cd /opt/zimbra/ssl/letsencrypt/
# /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem 
** Verifying 'cert.pem' against '/opt/zimbra/ssl/zimbra/commercial/commercial.key'
Certificate 'cert.pem' and private key '/opt/zimbra/ssl/zimbra/commercial/commercial.key' match.
** Verifying 'cert.pem' against 'chain.pem'
Valid certificate chain: cert.pem: OK
** Copying 'cert.pem' to '/opt/zimbra/ssl/zimbra/commercial/commercial.crt'
** Copying 'chain.pem' to '/opt/zimbra/ssl/zimbra/commercial/commercial_ca.crt'
** Appending ca chain 'chain.pem' to '/opt/zimbra/ssl/zimbra/commercial/commercial.crt'
** Importing cert '/opt/zimbra/ssl/zimbra/commercial/commercial_ca.crt' as 'zcs-user-commercial_ca' into cacerts '/opt/zimbra/common/lib/jvm/java/jre/lib/security/cacerts'
** NOTE: restart mailboxd to use the imported certificate.
** Saving config key 'zimbraSSLCertificate' via zmprov modifyServer mail2.next.zimbra.io...failed (rc=1)
** Installing ldap certificate '/opt/zimbra/conf/slapd.crt' and key '/opt/zimbra/conf/slapd.key'
** Copying '/opt/zimbra/ssl/zimbra/commercial/commercial.crt' to '/opt/zimbra/conf/slapd.crt'
** Copying '/opt/zimbra/ssl/zimbra/commercial/commercial.key' to '/opt/zimbra/conf/slapd.key'
** Creating file '/opt/zimbra/ssl/zimbra/jetty.pkcs12'
** Creating keystore '/opt/zimbra/mailboxd/etc/keystore'
** Installing mta certificate '/opt/zimbra/conf/smtpd.crt' and key '/opt/zimbra/conf/smtpd.key'
** Copying '/opt/zimbra/ssl/zimbra/commercial/commercial.crt' to '/opt/zimbra/conf/smtpd.crt'
** Copying '/opt/zimbra/ssl/zimbra/commercial/commercial.key' to '/opt/zimbra/conf/smtpd.key'
** Installing proxy certificate '/opt/zimbra/conf/nginx.crt' and key '/opt/zimbra/conf/nginx.key'
** Copying '/opt/zimbra/ssl/zimbra/commercial/commercial.crt' to '/opt/zimbra/conf/nginx.crt'
** Copying '/opt/zimbra/ssl/zimbra/commercial/commercial.key' to '/opt/zimbra/conf/nginx.key'
** NOTE: restart services to use the new certificates.
** Cleaning up 3 files from '/opt/zimbra/conf/ca'
** Removing /opt/zimbra/conf/ca/41b01cbb.0
** Removing /opt/zimbra/conf/ca/ca.key
** Removing /opt/zimbra/conf/ca/ca.pem
** Copying CA to /opt/zimbra/conf/ca
** Copying '/opt/zimbra/ssl/zimbra/ca/ca.key' to '/opt/zimbra/conf/ca/ca.key'
** Copying '/opt/zimbra/ssl/zimbra/ca/ca.pem' to '/opt/zimbra/conf/ca/ca.pem'
** Creating CA hash symlink '41b01cbb.0' -> 'ca.pem'
** Creating /opt/zimbra/conf/ca/commercial_ca_1.crt
** Creating CA hash symlink '4f06f81d.0' -> 'commercial_ca_1.crt'
** Creating /opt/zimbra/conf/ca/commercial_ca_2.crt
** Creating CA hash symlink '2e5ac55d.0' -> 'commercial_ca_2.crt'

On fini avec un restart du serveur :

# zmcontrol restart

Et on qu’à vérifier la webmail en confirmant la présence du petit cadena vert à gauche du HTTPS 🙂

Quitter la version mobile