
В один, не очень прекрасный день, заставили нас перейти со ставшего уже родным Alt-n mDaemon на Zimbra Collaboration Suite.
Все бы ничего, и холивар mDaemon vs. Zimbra оставим за рамками статьи, сам переход прошел довольно плавно, но пользователи стали тревожиться по поводу предупреждений браузеров и почтовых клиентов о недоверенном сертификате. Так как почтовый обмен осуществляется исключительно внутри корпорации, mDeamon имел сертификат, выданный удостоверяющим центром AD, поэтому там все было гладко. И тогда решил я и Zimbra выдать сертификат от ADCS.
Для начала попробовал через стандартный диалог web-интерфейса. Но там даже со стандартными настройками выходит ошибка.


Правда, если поле Дополнительное имя субъекта удалить, то генерация запроса проходит нормально.
Далее, либо скачиваем файл commercial.csr, либо заходим в консоль SSH, под учеткой zimbra и смотрим его содержимое:
cat /opt/zimbra/ssl/zimbra/commercial/commercial.csr -----BEGIN CERTIFICATE REQUEST----- MIIC8zCCAdsCAQAwZDELMAkGA1UEBhMCUlUxCzAJBgNVBAgMAjUyMQ0wCwYDVQQH <skip> IYTKJfkDPOm5XO4pQBtufMMQnmwUrnqcfrt8LUfCsjWwiImfcUaG -----END CERTIFICATE REQUEST-----
Копируем его содержимое и переходим в веб-интерфейс удостоверяющего центра Active Directory. Тут нужно упомянуть, что с этим интерфейсом нормально может работать только Internet Explorer.

Zimbra умеет работать только с base-64 сертификатами, поэтому выбираем соответствующие опции.
Нажимаем «Запроса сертификата», далее «Расширенный запрос сертификата», затем «Выдать запрос, используя base-64 шифрованный файл PKCS #10, или выдать запрос обновления, используя base-64 шифрованный файл PKCS #7.»
В первое поле вставляем текст запроса, шаблон выбираем «Веб-сервер».

После нажатия на кнопку «Выдать», нам данный сертификат выпускается и можно его загрузить (в BASE-64 виде, конечно же).
С помощью web-интерфейса zimbra мне так и не удалось установить данный сертификат, поэтому делаем это с помощью консоли.
Любым способом размещаем полученный сертификат и корневой сертификат УЦ в каталоге /opt/zimbra/ssl/zimbra/commercial
Теперь проверяем сертификат на валидность командой:
[zimbra@zimbra commercial]$ zmcertmgr verifycrt comm commercial.key certnew.cer CA.cer ** Verifying 'certnew.cer' against 'commercial.key' Certificate 'certnew.cer' and private key 'commercial.key' match. ** Verifying 'certnew.cer' against 'CA.cer' Valid certificate chain: certnew.cer: OK [zimbra@zimbra commercial]$
Если все ОК, то внедряем сертификат:
[zimbra@zimbra commercial]$ zmcertmgr deploycrt comm certnew.cer CA.cer ** Fixing newlines in 'certnew.cer' ** Fixing newlines in 'CA.cer' ** Verifying 'certnew.cer' against '/opt/zimbra/ssl/zimbra/commercial/commercial.key' Certificate 'certnew.cer' and private key '/opt/zimbra/ssl/zimbra/commercial/commercial.key' match. ** Verifying 'certnew.cer' against 'CA.cer' Valid certificate chain: certnew.cer: OK ** Copying 'certnew.cer' to '/opt/zimbra/ssl/zimbra/commercial/commercial.crt' ** Copying 'CA.cer' to '/opt/zimbra/ssl/zimbra/commercial/commercial_ca.crt' ** Appending ca chain 'CA.cer' to '/opt/zimbra/ssl/zimbra/commercial/commercial.crt' ** Importing cert '/opt/zimbra/ssl/zimbra/commercial/commercial_ca.crt' as 'zcs-user-сommercial_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 zimbra.domain.local...ok ** Saving config key 'zimbraSSLPrivateKey' via zmprov modifyServer zimbra.domain.local...ok ** 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/ca.key ** Removing /opt/zimbra/conf/ca/ca.pem ** Removing /opt/zimbra/conf/ca/d8183cc3.0 ** 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 'd8183cc3.0' -> 'ca.pem' ** Creating /opt/zimbra/conf/ca/commercial_ca_1.crt ** Creating CA hash symlink '0c6ba62c.0' -> 'commercial_ca_1.crt' [zimbra@zimbra commercial]$
Просмотреть примененный сертификат можно командой
zmcertmgr viewdeployedcrt
После всего перезапускаем службы zimbra
zmcontrol restart
Проверяем результат:

Предупреждений нет, сервис виден, как валидный. Что и требовалось!
