Бесплатные сертификаты от проекта 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 за возможность использования бесплатных сертификатов 🙂
Большое, большое, большущее спасибо!!!
Мучился с ручной установкой, ничего не получалось, пока не нашел твою статью.
Скрипт сработал на отлично!
Счастья, здоровья и крепких мозгов тебе по жизни!
поддерживаю! Спасибо за статью
Результат команды
«tar -czf /opt/zimbra/ssl/zimbra-$(date +»%d.%m.%y_%H.%M»).tar.gz /opt/zimbra/ssl/zimbra»
tar: Removing leading `/’ from member names
Есть идеи, товарищи ?
Сертификат выпустился, но все равно считался не действительным. Помогло использование переменной —preferred-chain «ISRG Root X1»
certbot certonly —standalone —preferred-chain «ISRG Root X1» -d $DOMAIN