Cipher suites

Article Information |
---|
This article applies to the following ZCS versions.
|
Introduction
By default, the Zimbra mailbox server, zmmailboxd, supports both strong and weak SSL/TLS cipher suites for IMAPS, POP3S, and HTTPS. A typical security requirement is to disable weak ciphers which usually includes SSL versions prior to SSLv3 and any cipher not supporting at least 128 bit.
Enable Strong Ciphers
To enable strong ciphers, weak ciphers must be disabled. It is best practise to run a SSL/TLS cipher scan first to see which ciphers your server currently supports.
As of today it is recommended to test HTTPS/SSL against multiple checks:
Once the supported weak ciphers are determined, they can be disabled one by one system wide using the zimbraSSLExcludeCipherSuites global directory attribute.
To disable weak ciphers use the zmprov command. Be sure to prefix the attribute name with "+" when using mcf to keep existing values.
su - zimbra zmprov mcf +zimbraSSLExcludeCipherSuites <cipher1> zmprov mcf +zimbraSSLExcludeCipherSuites <cipher2> zmprov mcf +zimbraSSLExcludeCipherSuites <cipher...> zmprov mcf +zimbraSSLExcludeCipherSuites <cipherN> zmmailboxdctl restart
The disabled ciphers in Zimbra by default include these:
$ zmprov gcf zimbraSSLExcludeCipherSuites zimbraSSLExcludeCipherSuites: SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA zimbraSSLExcludeCipherSuites: SSL_DHE_DSS_WITH_DES_CBC_SHA zimbraSSLExcludeCipherSuites: SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA zimbraSSLExcludeCipherSuites: SSL_DHE_RSA_WITH_DES_CBC_SHA zimbraSSLExcludeCipherSuites: SSL_RSA_EXPORT_WITH_DES40_CBC_SHA zimbraSSLExcludeCipherSuites: SSL_RSA_EXPORT_WITH_RC4_40_MD5 zimbraSSLExcludeCipherSuites: SSL_RSA_WITH_DES_CBC_SHA
Please note that curl by default will not connect to RC4 ciphers:
https://bugzilla.redhat.com/show_bug.cgi?id=807749
SSL Protocols
As of ZCS 8.6, SSLv2 and SSLv3 are disabled by default. Only these SSL Protocols are enabled by default:
- TLSv1
- TLSv1.1
- TLSv1.2
However, it has been found that certain older Microsoft Outlook clients (2011 and previous) require that the server also accept "SSLv2Hello". Enabling this does not mean that the server is actually allowing SSLv2, but it does mean that it allows the SSLv2Hello "introduction", before switching to TLSv1 or greater.
If using the Zimbra nginx proxy, it is not necessary to add SSLv2Hello to the mailstore configuration. However, if not using the Zimbra nginx proxy and only using the mailstore for SSL handling (i.e., mailboxd), then you must enable SSLv2Hello protocol to allow older Outlook clients to work:
zmprov mcf +zimbraMailboxdSSLProtocols SSLv2Hello zmmailboxdctl restart
In ZCS 8.7, SSLv2Hello will be enabled by default: https://bugzilla.zimbra.com/show_bug.cgi?id=97332
Debugging Cipher issues
1. Jetty can use a Java startup option to log SSL and cipher debug data to /opt/zimbra/log/zmmailboxd.out:
-Djavax.net.debug=ssl,handshake,data
This can be added to the end of your mailboxd_java_options:
a. Get your current mailboxd_java_options:
$ zmlocalconfig mailboxd_java_options
b. Add the above to it:
$ zmlocalconfig -e mailboxd_java_options="-server -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:NewRatio=2 -XX:PermSize=196m -XX:MaxPermSize=350m -XX:SoftRefLRUPolicyMSPerMB=1 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/zimbra/log -XX:ErrorFile=/opt/zimbra/log/hs_err_pid%p.log -Dorg.apache.jasper.compiler.disablejsr199=true -Djava.net.preferIPv4Stack=true -XX:+PrintGCDateStamps -Xloggc:/opt/zimbra/log/gc.log -XX:-UseGCLogFileRotation -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=4096K -Djavax.net.debug=ssl,handshake,data"
c. SSL and cipher logging will now be written to /opt/zimbra/log/zmmailboxd.out
Bugs
Prior to ZCS 5.0.10, the zimbraSSLExcludeCipherSuites attribute values are not picked up by the Jetty configuration for HTTPS. To fix, replace all occurrences of zimbraSSLExcludeCipherSuites with zimbraSSLExcludeCipherSuitesXML in /opt/zimbra/jetty/etc/jetty.xml.in.
cd /opt/zimbra/jetty/etc sed 's/%%zimbraSSLExcludeCipherSuites%%/%%zimbraSSLExcludeCipherSuitesXML%%/g' jetty.xml.in > /tmp/jetty.xml.in.new cp jetty.xml.in /tmp/jetty.xml.in.old mv /tmp/jetty.xml.in.new jetty.xml.in zmmailboxdctl restart
Please see bug 30691 for more details.
References
J2SE cipher list http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/JSSERefGuide.html#SunJSSE
OpenSSL ciphers list http://openssl.org/docs/apps/ciphers.html#SSL_v3_0_cipher_suites_