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 и видим где лежат сертификаты.