09.07.2023 - Установка сертификатов Letsencrypt в Zimbra на примере старой системы Ubuntu 14.04 
В данной статье речь пойдет о способе установки и продления SSL сертификата Letsencrypt для почтового сервера Zimbra на старой версии Ubuntu.
Как-то раз в рамках предоставляемых нами услуг ИТ-аутсорсинга возникла задача, установить SSL сертификат на веб станицу почтовика Zimbra. Решено было использовать классический Letsencrypt так как он бесплатный и имеет удобный механизм продления. Далее речь пойдет о выпуске сертификата Letsencrypt и об установке выпущенного ранее сертификата в Zimbra.
Выпуск сертификата Letsencrypt.
На современной Ubuntu операция выпуска сертификата довольно простая, достаточно выбрать ACME-клиент, обычно это certbot. Открыть нужные порты на сервере 80 и 443. Выбрать способ подтверждения Webroot или standalone.
Все описанное сверху справедливо и для старой системы, но есть нюанс, что Certbot не устанавливается корректно, например для версии 14.04 на момент 2023 года его просто нет.
Желания ставить сторонние репозитории нет, а в офф репе минимальный сертбот для убунты 16.06. Избежать приключений с окружением для certbot и поиском других ACME клиентов помог Docker.
Устанавливаем Docker
Для начала обновляем информацию о пакетах.
1 |
sudo apt-get update
|
Далее переходим к установке Docker (В вашей версии linux название пакетов может отличаться, но скорее всего это не станет припятсвием, так как в интернете много манов по его установке, также можно обратиться за помощью к нам).
1 |
sudo apt install docker.io
|
В результате получил следующий вывод и диалог согласия на установку пакета.
Для проверки установки docker можно использовать команду
1 |
sudo docker run hello-world
|
И её вывод
Compose из родного репозитория установить не получится, при желании можно использовать Pip. В данном случае решили обойтись без него
Скачиваем контейнер certbot\certbot.
1 |
sudo docker pull certbot/certbot
|
Далее будем обращаться к docker из консоли.
Вот пример готовой команды :
1 |
sudo docker run -it --rm -p 80:80 -v /home/letsencrypt/certs:/etc/letsencrypt:rw -v /home/letsencrypt/data:/data/letsencrypt:rw certbot/certbot certonly --force-renewal --preferred-chain "ISRG Root X1" --key-type rsa --standalone -d example.domain.com --email=example@domain.com --agree-tos --no-eff-email
|
Разберем команду на составляющие:
1 |
sudo docker run -it --rm
|
docker run Тут мы запускаем контейнер и задаем ему параметры
--it Опция -t назначает псевдо-TTY, подключенный к STDIN контейнера. Зачастую используется с опцией --interactive, -i - например, если вам нужно подключиться к оболочке (bash) внутри docker-контейнера для выполнения каких-то действий
--rm флаг, автоматически удаляющий контейнер после завершения процесса. По умолчанию контейнеры не удаляются.
Далее идет проброс порта –p , в нашем случае -p 80:80. Для того, чтобе ACME имел доступ по 80 порту и авторизоваться.
-v Монтирование тома, в нашем случае обязательно монтируем две папки и добавляем атрибуты rw
-v /home/letsencrypt/certs:/etc/letsencrypt:rw -v /home/letsencrypt/data:/data/letsencrypt:rw
Далее идет Имя самого контейнера certbot\certbot и опции выпуска сертификата.
Из опций могу отметить те, на которые стоитобратить внимание:
Опция --preferred-chain "ISRG Root X1" обязательна для получения правильной цепочки, без этой опции даже если установлен корневой сертификат ISRG Root X1
Верифицировать pem файлы не получится.
Опция --key-type rsa позволит нам сразу получить нужный формат ключа без различных танцев с бубном и правок настроек, так как по умолчанию выдается другой тип ключа.
В нашем случае используем –Standalone способ подтверждения, так в нашем случае порт 80 никем не слушается так как используется 443. При этом способе аутентификации поднимается свой временный вебсервер.
Если у вас прослушивается 80 порт вашим веб сервером можно его временно выключить либо использовать другой способ Аутентификации - Webroot. Проверить чем занят порт можно с помощью утилиты lsof.
Теперь перейдем к самой команде, вводим её в консоль.
Важно! LetsEncrypt ограничивает Число неудачных валидаций - не более 5 неудачных попыток, для одного аккаунта, для одного доменного имени, в течение часа.
Поэтому советую добавить опцию –dry-run конец команды.
1 |
sudo docker run -it --rm -p 80:80 -v /home/letsencrypt/certs:/etc/letsencrypt:rw -v /home/letsencrypt/data:/data/letsencrypt:rw certbot/certbot certonly --force-renewal --preferred-chain "ISRG Root X1" --key-type rsa --standalone -d example.domain.com --email=example@domain.com --agree-tos --no-eff-email –dry-run
|
Получим сообщение такого вида, для первой генерации сообщение может немного отличаться.
Если тестовый запуск прошел успешно, то можно переходит к основной команде.
1 |
sudo docker run -it --rm -p 80:80 -v /home/letsencrypt/certs:/etc/letsencrypt:rw -v /home/letsencrypt/data:/data/letsencrypt:rw certbot/certbot certonly --force-renewal --preferred-chain "ISRG Root X1" --key-type rsa --standalone -d example.domain.com --email=example@domain.com --agree-tos --no-eff-email
|
В результате должны получить следующий вывод
1 2 3 4 |
- Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.domain.ru/fullchain.pem Your key file has been saved at:: |
У выполнения этой команды есть нюанс, в директории etc/letsencrypt/live/example.domain.ru/ будут находиться только симлинки.
Используем команду ls –lah и видим где лежат сертификаты.
Переходим в директорию /home/letsencrypt/certs/archive/example.domain.ru
В папке мы увидим наши файлы.
Их наличие говорит об успешном выпуске сертификата.
Находясь в вышеописанной папке копируем файлы в директорию Zimbra.
1 |
cp cert.pem chain.pem fullchain.pem privkey.pem /opt/zimbra/ssl/zimbra/commercial/
|
Выдаем права на файлы пользователю Zimbra.
1 |
chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/*
|
Для Zimbra важно указать корневые сертификаты Letsencrypt.
Сделать это можно дописав в файл chain.pem двух блоков.
Скачиваем сертификаты
1.https://letsencrypt.org/certs/isrgrootx1.pem.txt.
2.https://letsencrypt.org/certs/letsencryptauthorityx3.pem.txt.
Задача образовать правильную последовательность. Если открыть chain.pem там будет один блок вида.
Открываем chain.pem с помощью команды
1 |
nano chain.pem (можно использовать vim)
|
Видим содержимое в формате:
-----BEGIN CERTIFICATE-----
<тут наша последовательность.>
-----END CERTIFICATE-----
Переходим в конец файла и добавляем два блока из сертификатов предоставленных по ссылкам 1 и 2 выше.
Должно получиться 3 блока, выглядит это так.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
-----BEGIN CERTIFICATE----- тут будет ваш кусок -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFjTCCA3WgAwIBAgIRANOxciY0IzLc9AUoUSrsnGowDQYJKoZIhvcNAQELBQAw TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTYxMDA2MTU0MzU1 WhcNMjExMDA2MTU0MzU1WjBKMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg RW5jcnlwdDEjMCEGA1UEAxMaTGV0J3MgRW5jcnlwdCBBdXRob3JpdHkgWDMwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCc0wzwWuUuR7dyXTeDs2hjMOrX NSYZJeG9vjXxcJIvt7hLQQWrqZ41CFjssSrEaIcLo+N15Obzp2JxunmBYB/XkZqf 89B4Z3HIaQ6Vkc/+5pnpYDxIzH7KTXcSJJ1HG1rrueweNwAcnKx7pwXqzkrrvUHl Npi5y/1tPJZo3yMqQpAMhnRnyH+lmrhSYRQTP2XpgofL2/oOVvaGifOFP5eGr7Dc Gu9rDZUWfcQroGWymQQ2dYBrrErzG5BJeC+ilk8qICUpBMZ0wNAxzY8xOJUWuqgz uEPxsR/DMH+ieTETPS02+OP88jNquTkxxa/EjQ0dZBYzqvqEKbbUC8DYfcOTAgMB AAGjggFnMIIBYzAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADBU BgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEBATAwMC4GCCsGAQUFBwIB FiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3JnMB0GA1UdDgQWBBSo SmpjBH3duubRObemRWXv86jsoTAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js LnJvb3QteDEubGV0c2VuY3J5cHQub3JnMHIGCCsGAQUFBwEBBGYwZDAwBggrBgEF BQcwAYYkaHR0cDovL29jc3Aucm9vdC14MS5sZXRzZW5jcnlwdC5vcmcvMDAGCCsG AQUFBzAChiRodHRwOi8vY2VydC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZy8wHwYD VR0jBBgwFoAUebRZ5nu25eQBc4AIiMgaWPbpm24wDQYJKoZIhvcNAQELBQADggIB ABnPdSA0LTqmRf/Q1eaM2jLonG4bQdEnqOJQ8nCqxOeTRrToEKtwT++36gTSlBGx A/5dut82jJQ2jxN8RI8L9QFXrWi4xXnA2EqA10yjHiR6H9cj6MFiOnb5In1eWsRM UM2v3e9tNsCAgBukPHAg1lQh07rvFKm/Bz9BCjaxorALINUfZ9DD64j2igLIxle2 DPxW8dI/F2loHMjXZjqG8RkqZUdoxtID5+90FgsGIfkMpqgRS05f4zPbCEHqCXl1 eO5HyELTgcVlLXXQDgAWnRzut1hFJeczY1tjQQno6f6s+nMydLN26WuU4s3UYvOu OsUxRlJu7TSRHqDC3lSE5XggVkzdaPkuKGQbGpny+01/47hfXXNB7HntWNZ6N2Vw p7G6OfY+YQrZwIaQmhrIqJZuigsrbe3W+gdn5ykE9+Ky0VgVUsfxo52mwFYs1JKY 2PGDuWx8M6DlS6qQkvHaRUo0FMd8TsSlbF0/v965qGFKhSDeQoMpYnwcmQilRh/0 ayLThlHLN81gSkJjVrPI0Y8xCVPB4twb1PFUd2fPM3sA1tJ83sZ5v8vgFv2yofKR PB0t6JzUA81mSqM3kxl5e+IZwhYAyO0OTg3/fs8HqGTNKd9BqoUwSRBzp06JMg5b rUCGwbCUDI0mxadJ3Bz4WxR6fyNpBK2yAinWEsikxqEt -----END CERTIFICATE----- |
Установка сертификатов в Zimbra.
Теперь, когда все мероприятия по подготовке выполнены заходим по пользователем zimbra.
1 |
su – zimbra
|
После этого необходимо проверить сертификаты.
1 |
zmcertmgr verifycrt comm privkey.pem cert.pem chain.pem
|
Ответ, который мы получаем.
1 2 3 4 5 |
** Verifying 'cert.pem' against 'privkey.key' Certificate 'cert.pem' and private key 'privkey.key' match. ** Verifying 'cert.pem' against 'chain.pem' Valid certificate chain: cert.pem: OK |
Остается переименовать закрытый ключ.
1 |
mv privkey.pem commercial.key
|
И финальное действие, устанавливаем сетификаты. (выполняем команды по очереди)
1 2 3 4 |
zmcertmgr deploycrt comm cert.pem chain.pem zmcontrol restart exit |
Таким образом мы установили сертификаты без особых усилий. В дальнейшем в планах сделать скрипт по автоматизации обновлений и поместить его в cron.
Обращайтесь в нашу компанию за внедрением почтового сервера на базе Zimbra!
Автор eg@oneweb.pro | Просмотров 4654




Комментарии (0)
Есть что сказать? Пишите нам ->