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 🙂