Github – vasyakrg/kerioconnect-ssl-letsencrypt: install and auto-renew ssl certificate for kerio-connect 9.x by let’s encrypt
этот скрипт скачивает последнюю версию Kerio Connect с сайта-производителя, нужно лишь правильно выставить переменную wget_kci_path в terraform/terraform.tfvars, но вы можете пропустить этот шаг, если уже установили керио сами.
Использование let’s encrypt с kerio connect
Let’s Encrypt возможно лучшая вещь, произошедшая в Интернет за последние лет десять. Это сервис, предоставляющий абсолютно бесплатно криптографические сертификаты X.509 для TLS шифрования (HTTPS). Главный минус, что сертификат выдается на 90 дней, но мы попробуем автоматизировать процедуру замены сертификата.
Отключаем http
Остановите в Kerio Connect если он запущен и установите режим запуска вручную, чтобы он не активировал себя снова при перезапуске. Измените служебный порт HTTPS на 8843 в панели администратора. Установка не будет работать иначе, потому что Certbot нуждается в портах 80 и 443 для проверки домена и получения сертификата.
Установим Nginx
Так как мы не хотим что-либо делать вручную, а также иметь возможность использовать стандартные веб-порты, нам необходимо установить реверс-прокси перед Kerio Connect
mkdir -p /var/www/mail chown www-data:www-data /var/www/mail apt-get install nginx ssl-cert
Создадим файл /etc/nginx/sites-available/kerio-connect.conf со следующим содержанием
server {
listen 80;
server_name nash_site; # заменить на адрес своего сайта
server_name_in_redirect off;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name nash_site; # заменить на адрес своего сайта
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
location /.well-known {
alias /var/www/mail/.well-known;
}
location / {
proxy_pass https://localhost:8843;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-Port $remote_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
chunked_transfer_encoding on;
proxy_connect_timeout 6000;
proxy_send_timeout 6000;
proxy_read_timeout 6000;
send_timeout 6000;
}
}
Слинкуем сайт с nginx:
ln -s /etc/nginx/sites-available/kerio-connect.conf /etc/nginx/sites-enabled/kerio-connect.conf
Проверим конфигурацию:
nginx -t
Если ошибок нет, перегружаем nginx:
systemctl restart nginx.service
Установка Certbot
Теперь установим программу, которая будет за нас обновлять сертификаты
wget https://dl.eff.org/certbot-auto chmod a x certbot-auto
Запустим
./certbot-auto
Создадим сертификат.
./certbot-auto certonly --webroot -w /var/www/mail -d nash_site
Если вы запускаете в первый раз, вам нужно будет ввести свой адрес электронной почты для экстренной ситуации, например, для отзыва сертификата. Это нужно сделать только один раз и после этого SSL-сертификат будет создан.
Начинаем использовать
Изменим в файле /etc/nginx/sites-available/kerio-connect.conf строки
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
на:
ssl_certificate /etc/letsencrypt/live/nash_site/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nash_site/privkey.pem;
Перезагрузим Nginx
systemctl restart nginx.service
Чтобы упростить обновление Kerio Connect, просто свяжите созданный сертификат и ключ с соответствующей папкой внутри иерархии Kerio Connect
ln -s /etc/letsencrypt/live/nash_site/fullchain.pem /opt/kerio/mailserver/sslcert/mail.crt ln -s /etc/letsencrypt/live/nash_site/privkey.pem /opt/kerio/mailserver/sslcert/mail.key
Теперь заходим в панель управления Kerio Connect, выбираем Configuration > SSL Certificates и смотрите что там за сертификаты. Выбирайте установленный от Let’s Encrypt и делайте его активным.
Все, теперь при заходе на Ваш сайт nginx будет автоматически перебрасывать соединение на https, а браузер не будет ругаться на неправильный сертификат.
Обновление.
Осталось автоматизировать процесс перевыпуска сертификатов.
Просто запустим:
./certbot-auto renew
Если сертификат близок к истечению срока действия, он будет автоматически обновлен, в противном случае он будет храниться до следующего запуска.
Сперва скопируем Certbot в удобное место. Например, в /usr/local/bin
cp certbot-auto /usr/local/bin/
Чтобы получить новый сертификат, необходимо перезапустить службы после успешного продления. Создайте скрипт /root/certbot-post-hook.sh со следующим содержимым:
#!/bin/sh systemctl restart nginx.service systemctl restart kerio-connect.service
Сделаем его исполняемым и проставим права:
chmod 500 /root/certbot-post-hook.sh chown root:root /root/certbot-post-hook.sh
Мы будем проверять необходимость перевыпуска сертификата каждую ночь, в 3 часа утра.
Создадим файл /etc/cron.d/certbot:
shell=/bin/sh path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 3 * * * root perl -e 'sleep int(rand(3600))' && certbot-auto -q renew --post-hook "/root/certbot-post-hook.sh"