Zimbra SSL Let’s encrypt

Установка SSL c центром сертификации Lets Encrypt
Инструкций довольно много, но большинство не особо актуальные
Так же хотелось написать готовый скрипт для автоматизации процесса обновления сертификатов

Установка Let’s encrypt

Сервер Zimbra https://www.zimbra.org/download/zimbra-collaboration
Установлен на Ubuntu 18.04 LTS
Идем на сайт https://certbot.eff.org/instructions и следуя инструкциям устанавливаем certbot под нашу систему

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

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

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

certbot certonly --standalone -d test.my.domain -d www.test.my.domain

После этого в папке /etc/letsencrypt/live/test.my.domain/ будут созданы сертификаты

cd /etc/letsencrypt/live/test.my.domain/
ls -1
cert.pem
chain.pem
fullchain.pem
privkey.pem
README

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

Сертификат IdenTrust расположен по ссылке – https://letsencrypt.org/certs/trustid-x3-root.pem.txt
Стараюсь использовать полные пути до файлов чтобы показать куда они сохраняются

cd /etc/letsencrypt/live/test.my.domain/
wget -O /etc/letsencrypt/live/test.my.domain/zimbra_chain.pem https://letsencrypt.org/certs/trustid-x3-root.pem.txt
cat /etc/letsencrypt/live/test.my.domain/chain.pem >> /etc/letsencrypt/live/test.my.domain/zimbra_chain.pem
ls -1
cert.pem
chain.pem
fullchain.pem
privkey.pem
README
zimbra_chain.pem
cat zimbra_chain.pem
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow
SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT
GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF
q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8
SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0
Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA
a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj
/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T
AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG
CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv
bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k
c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw
VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC
ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz
MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu
Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF
AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo
uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/
wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu
X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG
PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----

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

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

mkdir /opt/zimbra/ssl/letsencrypt
cp /etc/letsencrypt/live/test.my.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"
** 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
Останавливаются сервисы, и загружается сертификат, после этого служба сервера Zimbra перезапускается

tar -czf /opt/zimbra/ssl/zimbra-$(date +"%d.%m.%y_%H.%M").tar.gz /opt/zimbra/ssl/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 renew_zimbra_ssl
#!/bin/bash
#
DOMAIN="test.my.domain"
#
certbot renew
cd /etc/letsencrypt/live/$DOMAIN/ || exit
wget -O /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem https://letsencrypt.org/certs/trustid-x3-root.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"
chmod +x renew_zimbra_ssl
cd /etc/cron.weekly/
ln -s /home/ubadmin/renew_zimbra_ssl

Zimbra redirect to HTTPS

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

sudo su - zimbra -c "/opt/zimbra/bin/zmprov ms test.my.domain zimbraReverseProxyMailMode redirect"
sudo su - zimbra -c "zmproxyctl restart"

Можно через веб интерфейс
Настройка – Серверы – Открываем параметры сервера – Меню Прокси-сервер

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *