В прошлый статьях нас попросили рассказать об установке и обновлении сертификатов Let’s Encrypt.

Let’s Encrypt — центр сертификации, предоставляющий бесплатные криптографические сертификаты X.509 для TLS шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован.

image

Выдача Let's Encrypt


Запрос на Let's Encrypt желательно выполнить на сервере с Zimbra, чтобы получить сертификат SSL, CA Intermediate и Private Key. Для этого необходимо остановить службу почтового сервера (порты 80 и 443):

1. Останавливаем службы.

zmproxyctl stop
zmmailboxdctl stop


2. Загружаем пакет Let's Encrypt и заходим в каталог letencrypt:

Примечание. В RedHat и CentOS 6 перед установкой вам нужно будет включить репозиторий EPEL.

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




3. Запустите автоматический скрипт Let's Encrypt, используйте параметр certonly.

root@zimbra86:~/tmp/letsencrypt# ./letsencrypt-auto certonly --standalone

Сценарий настроит временный WEB-сервер для проверки и выдачи сертификата, при необходимости соглашаясь с лицензией и сообщив электронную почту:



Если вам нужно иметь несколько имен хостов на одном и том же SSL, то вместо этого следует использовать протокол Multi-SAN, SSL, где -d — ваши домены:

root@zimbra86:~/tmp/letsencrypt# ./letsencrypt-auto certonly --standalone -d xmpp.example.com -d conference.example.com

4. Если все будет хорошо с проверкой, то сертификат (сертификат + открытый ключ + цепочка) будет выпущен в формате «/etc/letencrypt/live/address/»:



5. На этом этапе вы можете снова запустить сервис и начать установку подписанного сертификата. Чтобы реализовать сертификат в Zimbra вам нужно дополнить цепочку «root CA». Создайте файл с «root CA» и строками файла «fullchain1.pem»)

root CA: (https://www.identrust.com/certificates/trustid/root-download-x3.html)

6. После того, как файл был создан, проверьте файлы с помощью следующей команды:

/opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem CHAIN_COMPLETA.pem

7. Выполните проверку, создайте резервные копии текущих сертификатов (настоятельно рекомендуется) и скопируйте секретный ключ в каталог «/opt/zimbra/ssl/zimbra/commercial» с именем «commercial.key»:

cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")
cp privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key


8. Выполните установку сертификата и перезапустите службы для проверки развертывания

/opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem

9. Правильная установка сертификата:



10. Перезагрузите сервис

zmcontrol restart

Обновление сертификатов



1. Останавливаем Zimbra.

/etc/init.d/zimbra stop

2. Получаем новые сертификаты и запускаем почтовый сервер.

certbot certonly --standalone -d mail.example.com
/etc/init.d/zimbra start


3. Полученные сертификаты потребуется загрузить в Zimbra. Копируем сертификаты:

cp /etc/letsencrypt/live/zimbra86.zimbra.io/* /opt/zimbra/ssl/letsencrypt/
chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/
cd /opt/zimbra/ssl/letsencrypt/


4. В конец файла chain.pem добавляем промежуточный сертификат Let's encrypt:

-----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-----


Если вы не добавите промежуточный сертификат, то получите ошибку на этапе проверки:

ERROR: Unable to validate certificate chain: cert.pem: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
error 2 at 1 depth lookup:unable to get issuer certificate


5. Проверяем установленные ключи и сертификаты:

su zimbra
$ cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
$ /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem

6. Если проверка прошла успешно, то устанавливаем обновленные сертификаты:

$ /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem chain.pem

7. Для применения установленного сертификата перезапустите все сервисы Zimbra:

# /etc/init.d/zimbra restart

Готово!

Комментарии (10)


  1. ildarz
    29.12.2017 12:25

    Процесс выдачи сертификатов полностью автоматизирован.

    И далее полтора десятка ручных команд, да еще и с прерыванием сервиса. :)


    1. vozhd99
      29.12.2017 12:34

      Не знаю, как на новой Zimbra. На старой (7.1.3) вполне деплоились сертификаты налету. Причём, что интересно, от Comodo — ок, а вот GeoTrust так не подхватился.


    1. vozhd99
      29.12.2017 13:22

      Кстати, в техцентре (wiki) Zimbra есть ссылка на скрипт, который это делает автоматически.
      wiki.zimbra.com/wiki/Installing_a_LetsEncrypt_SSL_Certificate
      github.com/JimDunphy/deploy-zimbra-letsencrypt.sh

      Зануда моде: автор пропустил очень важный кусок создания commecial_ca.crt, который по моему опыту вызывает самый затык у очень многих админов.


      1. KaterinaZextras Автор
        29.12.2017 13:23

        Исправим))


      1. ildarz
        29.12.2017 13:38

        Ну да, тут у автора неполный перевод статьи с wiki.
        А так конечно же это всё скриптуется, только почему-то не сотрудниками компаний, которые потом за поддержку Zimbra денег хотят. :)


  1. pred8or
    29.12.2017 14:55

    В боевых скриптах стоит использовать опции цертбота pre-hook и post-hook, которые исполняют соответствующие скрипты только если сертификат требует обновления. В pre-hook останавливается zimbra, в post-hook создаются и деплоятся цепочки сертификатов и запускается zimbra


  1. Loki3000
    29.12.2017 15:49

    А на каком порту он поднимает временный сервер? 443? Как я понимаю, http(s) запросы могут до почтового сервера вообще не доходить — дропаться где-нибудь на этапе роутера или вообще заворачиваться на другой сервер. В этом случае только ручками?


    1. ildarz
      29.12.2017 16:25

      Для получения сертификата совершенно не обязательно использовать тот же самый сервер, на котором вы будете его использовать (если, конечно, вы не хотите в каком-нибудь tpm закрытый ключ хранить :)). Можете получать на том, куда у вас приходит http, и потом копировать куда надо. Насколько это будет "ручками", зависит от вашего желания писать скрипты для автоматизации процесса (с учетом срока действия сертификата let's encrypt оно практически неминуемо появится).


      1. Loki3000
        29.12.2017 16:30

        Как раз таким вариантом и пользуюсь. И очень он мне не нравится — все жду когда же что-то более удобное придумают:)


  1. robert_ayrapetyan
    29.12.2017 20:05

    Как там с wildcard-сертификатами? Будут ли текущие клиенты совместимы в январе, или потом еще ждать?