В данной статье рассмотрим настройку связки (Let's Encrypt + NGINX_Proxy) + DirectumRX HTTPS.
Стабильная работа данной связки начинается с версии RX2.9. Иначе могут возникнуть такие неприятные моменты как работающие только через Internet Explorer гиперссылки и плохо работающие PUSH-уведомления (NOMAD).
Nginx является одним из самых популярных веб-серверов в мире. Его используют для хостинга самых больших и нагруженных сайтов в Интернете.
Так как Nginx в подавляющем большинстве случаев менее требователен к ресурсам, чем Apache; его можно использовать как в качестве веб-сервера, так и в качестве обратного прокси-сервера (reverse proxy).
Для обеспечения безопасности будем использовать SSL сертификат от Let's Encrypt.
Если вдруг вся эта история о проекте Let’s Encrypt прошла мимо вас, Let's Encrypt — центр сертификации от некоммерческой организации ISRG, существующий при поддержке EFF и многих компаний, взявшей на себя миссию дать людям бесплатные SSL/TLS сертификаты для сайтов и серверов. Сертификаты от Let's Encrypt уже используются на более чем 10 миллионах доменов.
Кроме очевидной «бесплатности» у сертификатов от Let's Encrypt есть особое, отсутствующее у любых других коммерческих сертификационных центров, достоинство: если вы однажды получили сертификат от Let's Encrypt, то при прочих равных это навсегда. Не нужно раз в год-два вручную обновлять сертификаты. Не нужно вообще вспоминать, что сертификаты где-то есть. Получил, настроил и забыл!
Внимательный читатель сразу захочет возразить: «Как же так, ведь известно, что сертификаты выдаются со сроком действия в три месяца?» Всё дело в автоматическом обновлении сертификатов, которое возможно при полном отсутствии действий со стороны человека.
Данную настройку нужно делать до установки DirectumRX, иначе будут ошибки при установке системы.
Расписывать процесс установки NGINX и СertBot, думаю, нет смысла, в интернете и так много статей. Для примера:
Как установить Nginx в Ubuntu 16.04
How To Secure Nginx with Let's Encrypt on Ubuntu 16.04)
После установки Nginx сделаем первые настройки. Нужно добавить в «/etc/nginx/sites-available/default (или Ваш домен)» следующее:
server {
#Ваш домен
server_name example.com;
location / {
# app1 reverse proxy follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# пишем ip адрес сервера где будет установлен RX
proxy_pass http://x.x.x.x:80;
}
}
a. устанавливаем SSL сертификат (ссылка)
b. Экспортируем установленный сертификат. Он нам понадобится при установке DirectumRX.
Далее идет стандартная установка системы.
Для стабильной работы WEB-доступа нужно увеличить время таймаута NGINX:
location / {
…
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
…
}
…
server {
server_name example.com;
location / {
# app1 reverse proxy follow
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
proxy_pass https://x.x.x.x:443;
}
ssl_dhparam /etc/ssl/certs/dhparam.pem;
listen 80; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/ example.com /fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/ example.com /privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
…
После успешной настройки можно забыть про обновление сертификатов. Так же у вас остается хороший инструмент proxy, смело используем для других серверов.
Отличная статья Рим, спасибо! Так получилось, что на днях также экспериментировал с Let's Encrypt.
Добавлю несколько отрицательных моментов, на которые наткнулся:
1. устройства на iOS не доверяют подобным средствам шифрования, поэтому если используется Solo и Jazz для iOS, стоит пересмотреть использование Let's Encrypt.
2. сертификат Let's Encrypt можно обновлять автоматически с помощью скрипта, вызываемого из планировщика CRON, однако сертификаты на IIS потребуется переустанавливать вручную, а также обновлять вручную конфигурационные файлы служб DirectumRX, где указаны отпечатки сертификата SSL.
3. Да, Вы правильно подметили, данное решение подходит для DirectumRX не ниже версии 2.9.
Андрей, спасибо за сообщение.
1. У нас Solo и Jazz работает стабильно,
2. Да сертификаты по сути нужно переустанавливать каждые 3 месяца, однако, у нас стоит 2 сертификата подряд и тот который стоит на внешку обновляется, а тот который на iis на внешку не доходит и после первой установки он больше не будет нигде ругать.
Отличная статья, спасибо.
У меня несколько вопросов только осталось:
Вообще можно полностью автоматизировать перевыпуск сертификатов через powershell ACMESharp:
https://marc.durdin.net/2017/02/lets-encrypt-on-windows-redux/
Один внешний IP и куча различных веб сервисов торчащих наружу по HTTPS (как на IIS так и Apache, nginx & etc). Надо роутить запросы. + DMZ. + Экономия лицензий Windows.
Будет работать все: и веб и толстый(c 2.9 он работает только на HTTP/HTTPS) и NOMAD.
Как оказалось этого не потребовалось внутри сети, сертификаты в IIS просрочены, но все работает без ошибок. Так как обновление сертификатов в РХ сделано далеко от идеального, оставили пока как есть, в надежде, что в каком-то из релизов все исправят.
Один внешний IP и куча различных веб сервисов торчащих наружу по HTTPS (как на IIS так и Apache, nginx & etc). Надо роутить запросы. + DMZ. + Экономия лицензий Windows.
1. Я не понял как экономятся лицензии если все равно хостим на IIS
2. Правильно ли я понял, если у меня нет проблем с лицензиями и все мои сервисы только на IIS, то нет смысла в прокси?
1. Я не понял как экономятся лицензии если все равно хостим на IIS
Обратный прокси - его можно сделать и на IIS, но так как у нас nginx, то -1 лицензия на Windows:
2. Правильно ли я понял, если у меня нет проблем с лицензиями и все мои сервисы только на IIS, то нет смысла в прокси?
Нет, лицензии и IIS здесь практически не влияют, это лишь приятные бонусы, основные кейсы для использования см. в ссылке на википедию. В кач-ве обратного прокси вы можете и IIS использовать.
А в чем соль настраивать SSL между nginx и IIS, если можно сразу настроить нормальный, полностью автоматизированный SSL на nginx и не трогать IIS?
Настройки SSL в nginx лучше хранить в отдельной конфиге и инклюдить по мере необходимость
include /etc/nginx/ssl.d/ssl.conf;
автоматизация Let's encrypt:
Создать конфигурационный файл letsencrypt.conf
Прописать в конфигурационные файлы всех сайтов где необходимо использование SSL сертификатов Let's encrypt строку
или
создать директорию
Выпуск сертификата
Расширение сертификата на новые поддомены
Продление сертификата
Настройка автопродления для systemd
В папке /etc/systemd/system/ создать файлы
ssl-cert-renewal.service и ssl-cert-renewal.timer
[Unit]
Description=SSL Cert Renewal
[Service]
ExecStart=/usr/bin/certbot renew --post-hook "systemctl reload nginx"
Description=Timer for SSL Cert Renewal
[Timer]
OnUnitActiveSec=12w
Unit=ssl-cert-renewal.service
[Install]
WantedBy=multi-user.target
Максим, в директуме 4.2 (и на верное 4.3) есть параметр ssl_cert_thumbprint с отпечатком сертификата. При установке RX на Linux и подключении letsencrypt к nginx нужны дополнительные действия после каждого обновления сертификата ?
Авторизуйтесь, чтобы написать комментарий