
Saludos amigos, hoy os quiero dejar una de esas novedades técnicas que a veces, pueden pasar inadvertidas a la hora de lanzar un producto, pero que sin duda son determinantes clave para subir de versión o no, se trata del soporte SSL SNI para Zimbra Collaboration 8.7.
Server Name Indication (SNI) es una extensión del protocolo TLS en el que el cliente indica al hostname que se quiere conectar al iniciar la conexión y el handshaking. Esto permite al servidor presentar múltiples certificados SSL en la misma dirección IP y puerto TCP.

SSL SNI en Zimbra Collaboration
Zimbra Collaboration soporta SSL SNI desde la Release 8.7. Esta funcionalidad requiere el servicio de Proxy, aunque es igualmente mandatario para Zimbra Collaboration 8.7.
Prerequisitos
El servicio de Proxy de Zimbra debe ser instalado y habilitado en el servidor. En un entorno de muli-server, estos pasos deben ser realizados en el nodo de Proxy.
Debemos tener también el certificado comercial + la llave privada + los certificados Intermedios y root que nos envía el fabricante.
Se puede usar por ejemplo una IPv4 pública para ciertos dominios, por ejemplo:
1.1.1.1 => example.com
1.1.1.1=> otherdomain.com
y podemos tener otra IPv4, por ejemplo porque un Cliente lo requiere así, y publicar por allí otra cantidad de Certificados SSL, por ejemplo:
3.3.3.3 => yetanotherdomain.com (Un Certificado Comodo Wildcard SSL)
3.3.3.3 => thisisanotherdomain.com (Un certificado gratuito de Let's Encrypt SSL)
3.3.3.3 => customer001.net (Un Certificado SSL RapidSSL)
etc.
Soporte de los Navegadores para SNI
Por supuesto, la otra parte de SNI se ubica en los navegadores web, Zimbra por su parte no ha testeado todos ellos, pero nos deja una breve tabla donde se puede ver los que están soportados :
| Software | Type | Supported | Notes | Supported since |
|---|---|---|---|---|
| Internet Explorer | Web browser | Since version 7 on Vista (not supported on XP) | 2006 | |
| Mozilla Firefox | Web browser | Since version 2.0 Reference 116169 | 2006 | |
| curl | Command-line tool and library | Since version 7.18.1 | 2008 | |
| Safari | Web browser | Not supported on XP | ||
| Google Chrome | Web browser | Since 6.0 | 2010 | |
| BlackBerry OS | Web browser | 7.2 or later | ||
| Windows Mobile | Web browser | Some time after 6.5<ref>Template:Cite web</ref> | ||
| Android default browser | Web browser | Honeycomb (3.x) for tablets and Ice Cream Sandwich (4.x) for phones<ref>Template:Cite web</ref> | 2011 | |
| wget | Command-line tool | Since version 1.14 | 2012 | |
| Nokia Browser for Symbian | Web browser | |||
| Opera Mobile | Web browser | Not supported on Series60 |
Configurando la dirección IP por dominio
– 1. Deberemos añadir, en este ejemplo example.com. Deberemos ejecutar el comando zimbraVirtualHostName de mail.example.com y el comando zimbraVirtualIPAddress a la IP, por ejemplo, 1.2.3.4. Deberemos estar seguros que zimbraVirtualHostName queda configurado con el nombre fqdn que usaremos después para acceder, y que el certificado usa como CN (common name) claro.
zmprov md example.com zimbraVirtualHostName mail.example.com zimbraVirtualIPAddress 1.2.3.4
NOTA: Si el servidor, está detrás de un Firewall o NAT con dirección externa, deberemos lanzar el comando con la IPv4 externa vinculada a mail.example.com.
Verificando y preparando los Certificados SSL
Deberemos de tener ya todos los ficheros proporcionados, varios ficheros de CA dependiendo del fabricante. Por lo tanto deberemos tener, los ficheros de CA, el fichero de certificado CRT y el fichero de llave privada usada para crear el CSR.
– 1. Pondremos los siguientes ficheros en el directorio /tmp/, el certificado example.com, la llave privada y los ficheros de CA Intermedias. Por ejemplo aquí podremos ver un fichero de root y otro de CA, que deberemos combinar en solamente uno.
ls /tmp/example.com
example.com.key
example.com.crt
example.com.root.crt
example.com.intermediate.crt
– 2. Deberemos unir los certificados de root e intermedios en un solo fichero llamado example.com_ca.crt
cat example.com.root.crt example.com.intermediate.crt >> example.com_ca.crt
– 3. Ahora, deberemos confirmar si el certificado, la llave privada y el fichero con las CA y el root coinciden. Como usuario zimbra (es así desde 8.7):
/opt/zimbra/bin/zmcertmgr verifycrt comm /tmp/example.com/example.com.key /tmp/example.com/example.com.crt /tmp/example.com/example.com_ca.crt
Comprobando el resultado, deberá ser algo como lo siguiente:
** Verifying '/tmp/example.com.crt' against '/tmp/example.com.key'
Certificate '/tmp/example.com.crt' and private key '/tmp/example.com.key' match.
** Verifying '/tmp/example.com.crt' against '/tmp/example.com_ca.crt'
Valid certificate chain: /tmp/example.com.crt: OK
Desplegando el certificado o los certificados en el servidor
– 1. El primer paso será añadir el certificado y las CA en un solo fichero llamado example.com.bundle
cat example.com.crt example.com_ca.crt >> example.com.bundle
– 2. El siguiente paso será guardar los certificados, y la llave privada en el LDAP:
/opt/zimbra/libexec/zmdomaincertmgr savecrt example.com example.com.bundle example.com.key
** Saving domain config key zimbraSSLCertificate...done.
** Saving domain config key zimbraSSLPrivateKey...done.
La sintaxis es la siguiente:
/opt/zimbra/libexec/zmdomaincertmgr savecrt
– 3. Una vez tenemos ya todos los certificados listos para todos los dominios, deberemos lanzar el comando para desplegar todos ellos. Esto guardará los certificados en la siguiente ruta /opt/zimbra/conf/domaincerts/example.com:
/opt/zimbra/libexec/zmdomaincertmgr deploycrts
** Deploying cert for example.com...done.
Comprobando y configurando el Proxy
Deberemos lanzar estos comandos en los Hosts que corren el servicio de Proxy.
zimbraReverseProxySNIEnabled should be set to TRUE in server and global config.
zmprov mcf zimbraReverseProxySNIEnabled TRUE
Reiniciaremos ahora los servicios de Proxy
zmproxyctl restart
Una vez el servicio de Proxy se reinicia, probaremos a acceder a la URL que hemos especificado anteriormente en el “zimbraVirtualHostName” y esto debería mostrarnos el certificado correcto para https.
Incidencias conocidas
– Bug 102913 – Multiple SSL domains on single server (SNI) for HTTPS connections
– Bug 103362 – Multiple SSL domains on single server (SNI) for IMAPS/POP3S connections

Espero que con la 8.7 hayan corregido el bug por el que zmdomaincertmgr no sustituye los certificados anteriores ni tampoco avisa que no va a hacerlo, fue muy divertido la primera vez (no, para nada)
Saludos Rafael,
Puedes echarle un vistazo a la Release Candidate de la 8.7, y si lo sigue conteniendo escribir en el Bug, por cierto cual es el numero de Bug al que te refieres? Puedo ojear a ver en que estado se encuentra.
Un saludo
Me ha tocado emplearme a fondo para encontrarlo porque ya ni me acordaba del ID https://bugzilla.zimbra.com/show_bug.cgi?id=97981 parece que sí que está resuelto
Parece resuelto sin problema en 8.7 si 🙂
Un saludo
Que tal Jorge, Muchas felicidades por tu trabajo y por compartir todas tus experiencias.
Tengo una duda.
Tengo un zimbra version open source, ya configurado con mi dominio principal, pero ahora me surge la necesidad de crear un nuevo dominio
Para otra empresa interna, el detalle que veo es que al crear el dominio solo me permite agregarlo al servidor host principal por ejemplo: mail.ejemplo.mx.
Para la nuevo dominio me gustaría agregar otro servidor host es decir para que el registro de mailbox sea a un servidor : mail.ejemploempresa2.mx
Esto puedo lograrlo ? o bien tengo que hacer uso del proxy nginx y dns interno?
Saludos Guillermo, en Zimbra puedes añadir sin problema los dominios adicionales que desees. Solamente debes tener la zona DNS en orden, ya sea bien de manera interna o externa, o con SplitDNS. Busca algo de información, o escribenos mas concretamente que es lo que necesitas hacer.
También puedo ayudarte, y la Comunidad, en el siguiente foro – https://forums.zimbra.org/viewforum.php?f=35
Un saludo
Hola Jorge,
En el blog oficial de Zimbra hay un post de las operaciones de Synacor respecto a la recuperación frente a desastres, podrías indicarnos poco más a fondo la manera que hace uso Synacor de herramientas como Scality y la replicación de SAN.
Sigo tu blog y siempre trae información interesante para administradores de Zimbra.
Saludos y exitos
Saludos Andrés,
Voy a contactar con Eduardo para que recopile algo mas de información y os la pase.
Un saludo
@Andres, estoy le enviando un correo con esto.
Nice post really well done.
I have a question, how to do the same using just certificates from letsencrypt for different domains like example.com mail.example.com foo.com mail.foo.com bar.com mail.bar.com etc… etc… on the same IP assuming that the main domain of the server like for instance mail.example.net was already covered by letsencrypt certificate.
I am asking this because in the above example the name of the certificates are a little bit different form the standard letsencrypt certificates.
Hi Nino,
You can generate another let’s encrypt using the same IP, but different hostnames, let’s encrypt will not complain about it, you can follow the Wiki I wrote about let’s encrypt and Zimbra
Let me know the issues you are facing.
Best regards
esto aplica para colocar un adicional certificado para un segundo dominio de email en zimbra?
Saludos Cesar,
Depende, si quieres usar la misma IP Publica, si, si quieres usar una diferente tienes que seguir los pasos de este otro articulo.
Esto Funciona con letsencrypt????
Si claro, siempre que tengas ya el .crt y demas, funciona sin problemas
un saludo
Gracias Jorge
Saludos amigos ya tengo configurado el SNI para 2 dominios por interfaz web trabaja a la perfeccion pero al momento los clientes que se conectan por pop imap escoje un certificado distinto al fqdn y genera error que debo hacer gracias
Hola Jorge, hace unos dias estoy probando con certificados ssl en mi servidor, y me surgio la siguiente duda.
En mi servidor principal (ip 1.1.1.1) tengo el dominio mail.cable.com en el cual le aplique un certificado ssl, hasta aca todo bien funciona ok.
Ademas de este dominio tengo otros andando por ej cable3.com, cable4.com.
La pregunta es si puedo instalar otros certificados para esos dominios en el mismo servidor? en mis dns tengo registros CNAME que llevan a la ip 1.1.1.1 en los dos dominios cable3.com y cable4.com.
Saludos
Si claro Emiliano, este blog indica los pasos para realizar lo que comentas 🙂
Síguelos y dime si tienes dudas
por https funcionan los certificados correctamente, pero por un cliente como thunderbird al agregar los otros dominios y tratar de enviar un correo dice que hay un error con el certificado y muestra el certificado del dominio principal y no del dominio secundario que se configuro siguiendo el articulo, hay alguna forma de instalar varios certificados para el smtp?
Saludos Antonio,
El SMTP usa el nombre general del servidor, si en tu caso imagina que es zimbra.tudominio.es simplemente pon un SSL, aunque sea let’s encrypt, a ese nombre de dominio tambien.
Un saludo
Hola Jorge, que implicaciones tiene no crear certificados para @dominio2 , @dominio3, etc.
Saludos,
Ninguna, que esos dominios usaran el SSL autofirmado
Un saludo
Tengo una preguna, no puedo enviar correos externos pero si los puedo recibir, ya configure los dns, no se si tenga algo que ver el certificado ssl que no permita enviar correos a gmail hotmail… ya habilite el puerto 25 cambie el mta, pero nada… Disculpas las molestias, por cierto
Saludos Ricardo,
Ojea el zimbra.log y el mailbox.log para ver que esta pasando, donde van esos emails que intentas enviar.
Un saludo