Установка SSL Let’s encrypt сертификата на Zimbra

Бесплатные сертификаты от проекта Let’s Encrypt сейчас довольно популярны. Установка не сложная, а также имеется возможность автоматизации процесса обновления выпущенных сертификатов.

# Статья обновлена 26.01.22

Для начала нам потребуется установить репозиторий epel-release и пакет certbot (все команды выполняются с правами root):

yum install epel-release
yum install certbot

Установка и обновление let’s encrypt сертификата

Имя домена Zimbra в примере: test.my.domain
Домен должен быть куплен и доступен извне по имени по портам HTTP (80) и HTTPS (445).

Генерация нового сертификата

Введем переменную:

DOMAIN="test.my.domain"

Генерируем сертификат, можно добавить домен с www, если он не настроен, то его можно не генерировать:

certbot certonly --standalone -d $DOMAIN

После этого в папке /etc/letsencrypt/live/$DOMAIN/ будут созданы сертификаты:

ls -1 /etc/letsencrypt/live/$DOMAIN/
cert.pem
chain.pem
fullchain.pem
privkey.pem
README

Объединение сертификатов chain.pem с корневым сертификатом IdenTrust

Теперь перейдем в каталог letsencrypt с нашим доменом и скачаем сертификат isrgrootx1 с сервера Zimbra:

cd /etc/letsencrypt/live/$DOMAIN/
wget -4 -O /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem https://letsencrypt.org/certs/isrgrootx1.pem.txt
cat /etc/letsencrypt/live/$DOMAIN/chain.pem >> /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem
tar -czf /opt/zimbra/ssl/zimbra-$(date +"%d.%m.%y_%H.%M").tar.gz /opt/zimbra/ssl/zimbra

Проверка сертификатов

После того как мы получили сертификаты, необходимо их проверить с помощью сервера Zimbra. Для этого создадим папку letsencrypt и скопируем туда полученные сертификаты:

mkdir /opt/zimbra/ssl/letsencrypt
cp /etc/letsencrypt/live/$DOMAIN/* /opt/zimbra/ssl/letsencrypt/

Назначим права на эти файлы для пользователя zimbra и проведем верификацию:

chown -Rfv zimbra:zimbra /opt/zimbra/ssl/letsencrypt/
sudo su - zimbra -c "zmcertmgr verifycrt comm /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/zimbra_chain.pem"
** Verifying '/opt/zimbra/ssl/letsencrypt/cert.pem' against '/opt/zimbra/ssl/letsencrypt/privkey.pem'
Certificate '/opt/zimbra/ssl/letsencrypt/cert.pem' and private key '/opt/zimbra/ssl/letsencrypt/privkey.pem' match.
** Verifying '/opt/zimbra/ssl/letsencrypt/cert.pem' against '/opt/zimbra/ssl/letsencrypt/zimbra_chain.pem'
Valid certificate chain: /opt/zimbra/ssl/letsencrypt/cert.pem: OK

Если проверка завершилась неудачно, то проверяйте как собрался IdenTrust, скорей всего ошибка в нём:

** Verifying '/opt/zimbra/ssl/letsencrypt/cert.pem' against '/opt/zimbra/ssl/letsencrypt/privkey.pem'
Certificate '/opt/zimbra/ssl/letsencrypt/cert.pem' and private key '/opt/zimbra/ssl/letsencrypt/privkey.pem' match.
** Verifying '/opt/zimbra/ssl/letsencrypt/cert.pem' against '/opt/zimbra/ssl/letsencrypt/zimbra_chain.pem'
ERROR: Unable to validate certificate chain: /opt/zimbra/ssl/letsencrypt/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

Установка сертификатов

Для установки сертификатов имеет смысл сделать бэкап текущих
Копируется файл rivkey.pem в /opt/zimbra/ssl/zimbra/commercial/commercial.key

cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/commercial.key

Останавливаем сервисы Zimbra, и загружаем новые сертификаты и после этого запускаем службы снова:

sudo su - zimbra -c "zmproxyctl stop"
sudo su - zimbra -c "zmmailboxdctl stop"
sudo su - zimbra -c "zmcertmgr deploycrt comm /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/zimbra_chain.pem"
sudo su - zimbra -c "zmcontrol restart"

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

Обновление происходит в том же порядке, с разницей что certboot запускается на обновление. Ниже готовый скрипт.
Он так же подойдет для первоначальной генерации сертификатов если заменить строчку certbot renew на certbot certonly —standalone -d $DOMAIN
Скрипт старался писать универсальным, поэтому достаточно вписать своё имя домена в переменную $DOMAIN
Скрипт можно добавить в crontab и выполнять от учетной записи root раз в месяц

nano /etc/cron.monthly/zimbrassl && chmod +x /etc/cron.monthly/zimbrassl
#!/bin/bash
#
DOMAIN="your-domain"
#
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
#
certbot renew
#
iptables -D INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
#
cd /etc/letsencrypt/live/$DOMAIN/ || exit
#wget -4 -O /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem https://letsencrypt.org/certs/trustid-x3-root.pem.txt
wget -4 -O /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem https://letsencrypt.org/certs/isrgrootx1.pem.txt
#
cat /etc/letsencrypt/live/$DOMAIN/chain.pem >> /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem
#
tar -czf /opt/zimbra/ssl/zimbra-$(date +"%d.%m.%y_%H.%M").tar.gz /opt/zimbra/ssl/zimbra
#
mkdir /opt/zimbra/ssl/letsencrypt
cp /etc/letsencrypt/live/$DOMAIN/* /opt/zimbra/ssl/letsencrypt/
#
chown -Rfv zimbra:zimbra /opt/zimbra/ssl/letsencrypt/
#
sudo su - zimbra -c "zmcertmgr verifycrt comm /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/zimbra_chain.pem"
#
cp /opt/zimbra/ssl/letsencrypt/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
chown zimbra:zimbra /opt/zimbra/ssl/zimbra/commercial/commercial.key
#
sudo su - zimbra -c "zmproxyctl stop"
sudo su - zimbra -c "zmmailboxdctl stop"
sudo su - zimbra -c "zmcertmgr deploycrt comm /opt/zimbra/ssl/letsencrypt/cert.pem /opt/zimbra/ssl/letsencrypt/zimbra_chain.pem"
sudo su - zimbra -c "zmcontrol restart"

Переадресация вебморды Zimbra на HTTPS

Имеет смысл сделать переадресацию веб интерфейса с HTTP на HTTPS

DOMAIN=mail.domain.com
sudo su - zimbra -c "/opt/zimbra/bin/zmprov ms $DOMAIN zimbraReverseProxyMailMode redirect"
sudo su - zimbra -c "zmproxyctl restart"

Спасибо Let’s Encrypt за возможность использования бесплатных сертификатов 🙂

Оставьте комментарий