Вверх

 
  • Комплексное ИТ обслуживание Вашего бизнеса 24 часа 7 дней в неделю!
  • IP телефония со знанием дела. Установка и настройка.
  • Поставки оборудования по выгодным ценам

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/ будут находиться только симлинки.

Используем команду lslah и видим где лежат сертификаты.

 

Переходим в директорию /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!

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


Есть что сказать? Пишите нам ->

Новости IT рынка