четверг, 22 октября 2020 г.

Использование SSL-сертификатов Let's Encrypt из репозитория GitLab на Zimbra Collaboration OSE

В предыдущей заметке был описан механизм загрузки SSL-сертификатов Let's Encrypt в репозиторий GitLab. Теперь доставим эти сертификаты на сервер Zimbra Collaboration Open Source Edition. Сертификаты и закрытый ключ хранятся в репозитории, так что триггером для запуска процесса обновления сертификатов на почтовом сервере будет служить наличие нового коммита в нём. Скрипт будет запускаться на почтовом сервере и рассчитан на использование в случае, когда один сервер Zimbra обслуживает один почтовый домен.

Создадим скрипт и сделаем его исполняемым
touch /scripts/ssl_update.sh
chmod +x /scripts/ssl_update.sh
Сам скрипт выглядит так:
#!/bin/bash
zimbra_path="/opt/zimbra/ssl/letsencrypt"
branch_name="oldfag.ru"
# Проверяем наличие каталога, если его нет, то создаём
if [ ! -d ${zimbra_path} ]; then
    mkdir -m 0700 ${zimbra_path}
    chown -R zimbra: ${zimbra_path}
fi

# Функция обновления сертификата
certificate_update () {
    su - zimbra -c "zmcertmgr verifycrt comm ${zimbra_path}/privkey.pem ${zimbra_path}/cert.pem ${zimbra_path}/chain.pem"
    if [ $? == 1 ]; then
        echo "certificate not verified"
        exit 1
    fi

    # Сохраняем резервную копию сертификатов
    cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")

    # Устанавлвием  новый сертификат
    cp ${zimbra_path}/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
    su - zimbra -c "zmcertmgr deploycrt comm ${zimbra_path}/cert.pem ${zimbra_path}/chain.pem"
    if [ $? == 1 ]; then
        echo "certificate deploy failed"
        exit 1
    fi
    su - zimbra -c "zmcontrol restart"
}

# Проверяем существование локального репозитория, если его нет, то создаём
if [ ! -d "${zimbra_path}/.git" ]; then
    git clone --single-branch --branch ${branch_name} https://gituser:gituserpassword@gitlab.oldfag.ru/automation/ssl.git ${zimbra_path}/.
    certificate_update
fi

# Проверяем, есть ли обновления в репозитории
cd ${zimbra_path}
git fetch
if [ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]; then
    git pull
    certificate_update
fi
Для работы скрипта на любом другом сервере нужно изменить только 2 переменных zimbra_path - каталог, в который будут загружаться сертификаты, и branch_name - имя ветки репозитория, в которой хранятся необходимые сертификаты.

При использовании https есть верятность того, что на сервере Zimbra будет отсутствовать корневой сертефикат удостоверяющего центра, выдвшего сертификат, используемый на сервере GitLab, в результате чего при при выполнении git [ clone | fetch | pull ] будет выдаваться сообщение об ошибке. Как это решить описано в соответствующей заметке.

Последнее, что осталось, это добавить запись в /etc/crontab для запуска скрипта по расписанию каждый день в 4 часа утра
# Update zimbra certificate
00 4    * * *   root    /scripts/ssl_update.sh

1 комментарий:

  1. Meanwhile, Delaware permits casinos and poker however no sports activities betting. In addition to offering trusted safety 점보카지노 for cash funds, the best UK on-line casinos provide gamers entry to devoted customer help groups. The casino websites on our Top Seven record all present first rate customer support, some higher than others. If you favor to have customer help available 24/7, you might go for a specific casino website, similar to Grosvenor or RedKings.

    ОтветитьУдалить