Настройка Let's Encrypt + NGINX_Proxy + DirectumRX

16 10

В данной статье рассмотрим настройку связки (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, то при прочих равных это навсегда. Не нужно раз в год-два вручную обновлять сертификаты. Не нужно вообще вспоминать, что сертификаты где-то есть. Получил, настроил и забыл!
 

Внимательный читатель сразу захочет возразить: «Как же так, ведь известно, что сертификаты выдаются со сроком действия в три месяца?» Всё дело в автоматическом обновлении сертификатов, которое возможно при полном отсутствии действий со стороны человека.

1. Установка и настройка NGINX(первоначальная) до установки DirectumRX

Данную настройку нужно делать до установки 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;

}

}

2. Получаем SSL сертификаты от Let's Encrypt на IIS server

a. устанавливаем SSL сертификат (ссылка)

b. Экспортируем установленный сертификат. Он нам понадобится при установке DirectumRX.


 

 3. Установка DirectumRX(HTTPS) на IIS используя сертификат, который мы получили в пункте 2 (стандартная установка системы)

  • Полученный сертификат в пункте 2, нужно установить в личное хранилище текущего компьютера.
  • Выбираем этот сертификат в пункте «Настройки протокола HTTPS»


 

Далее идет стандартная установка системы.

4. Настраиваем SSL сертификат на NGINX, закрываем 80 порт.

  1. Описание получения SSL сертификата можно посмотреть в статье Как повысить безопасность Nginx с помощью Let's Encrypt в Ubuntu 18.04 (пункт 1-4)
  2. Когда certbot спросит «Как настроить конфигурацию HTTPS?», выбираем пункт 2.


 

5. Настройка для NGINX для WEB

Для стабильной работы WEB-доступа нужно увеличить время таймаута NGINX:
 

location / {

…

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

…

}

6. В итоге конфигурационный файл NGINX в готовом виде выглядит так:

…

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.

Андрей Ардашев: обновлено 30.01.2019 в 08:34
Рим Саляхов

Андрей, спасибо за сообщение.

1. У нас Solo и Jazz работает стабильно, 

2. Да сертификаты по сути нужно переустанавливать каждые 3 месяца, однако, у нас стоит 2 сертификата подряд и тот который стоит на внешку обновляется, а тот который на iis на внешку не доходит и после первой установки он больше не будет нигде ругать. 

Андрей Посаженников

Отличная статья, спасибо. 

У меня несколько вопросов только осталось:

  1. С какой целью вы в ставите reverse proxy? Почему не выставляете сразу IIS? Ведь это дополнительное звено в обработке запроса, а значит дополнительное администрирование, обновление, снижение общей надежности системы.
  2. Я правильно понимаю что так будет работать только web доступ RX? Или desktop тоже поддерживает такой режим работы?
  3. Пробовали ли вы написать скрипт, который автоматически обновляет сертификаты LE на IIS? Вроде задача выглядит вполне выполнимой.

 

Роман Деменков

Вообще можно полностью автоматизировать перевыпуск сертификатов через powershell ACMESharp:

https://marc.durdin.net/2017/02/lets-encrypt-on-windows-redux/

Денис Архипов
  1. С какой целью вы в ставите reverse proxy? Почему не выставляете сразу IIS? Ведь это дополнительное звено в обработке запроса, а значит дополнительное администрирование, обновление, снижение общей надежности системы.

Один внешний IP и куча различных веб сервисов торчащих наружу по HTTPS (как на IIS так и Apache, nginx & etc). Надо роутить запросы. + DMZ. + Экономия лицензий Windows.

  1. Я правильно понимаю что так будет работать только web доступ RX? Или desktop тоже поддерживает такой режим работы?

Будет работать все: и веб и толстый(c 2.9 он работает только на HTTP/HTTPS) и NOMAD.

  1. Пробовали ли вы написать скрипт, который автоматически обновляет сертификаты LE на IIS? Вроде задача выглядит вполне выполнимой.

Как оказалось этого не потребовалось внутри сети, сертификаты в IIS просрочены, но все работает без ошибок. Так как обновление сертификатов в РХ сделано далеко от идеального, оставили пока как есть, в надежде, что в каком-то из релизов все исправят.

Денис Архипов: обновлено 31.01.2019 в 11:38
Сергей Камышев

Один внешний IP и куча различных веб сервисов торчащих наружу по HTTPS (как на IIS так и Apache, nginx & etc). Надо роутить запросы. + DMZ. + Экономия лицензий Windows.

1. Я не понял как экономятся лицензии если все равно хостим на IIS

2. Правильно ли я понял, если у меня нет проблем с лицензиями и все мои сервисы только на IIS, то нет смысла в прокси?

Сергей Камышев: обновлено 05.02.2019 в 08:00
Денис Архипов

1. Я не понял как экономятся лицензии если все равно хостим на IIS

Обратный прокси - его можно сделать и на IIS, но так как у нас nginx, то -1 лицензия на Windows:

2. Правильно ли я понял, если у меня нет проблем с лицензиями и все мои сервисы только на IIS, то нет смысла в прокси?

Нет, лицензии и IIS здесь практически не влияют, это лишь приятные бонусы, основные кейсы для использования см. в ссылке на википедию. В кач-ве обратного прокси вы можете и IIS использовать.

Денис Архипов: обновлено 05.02.2019 в 10:40
Максим Буланов

А в чем соль настраивать SSL между nginx и IIS, если можно сразу настроить нормальный, полностью автоматизированный SSL на nginx и не трогать IIS?

Максим Буланов

Настройки SSL в nginx лучше хранить в отдельной конфиге и инклюдить по мере необходимость

include /etc/nginx/ssl.d/ssl.conf;

автоматизация Let's encrypt:

Создать конфигурационный файл letsencrypt.conf

location ^~ /.well-known/acme-challenge/ {
   default_type "text/plain";
   root /var/www/letsencrypt;
}
location = /.well-known/acme-challenge/ {
   return 404;
}

Прописать в конфигурационные файлы всех сайтов где необходимо использование SSL сертификатов Let's encrypt строку

include /etc/nginx/default.d/*.conf;

или

include /etc/nginx/default.d/letsencrypt.conf;

создать директорию

/var/www/letsencrypt

Выпуск сертификата

certbot certonly --webroot -w /var/www/letsencrypt -d domain.ru -d www.domain.ru

Расширение сертификата на новые поддомены

certbot certonly --webroot -w /var/www/letsencrypt --expand -d domain.ru -d www.domain.ru -d nomad.domain.ru

Продление сертификата

certbot renew --post-hook "systemctl reload nginx"

 

Настройка автопродления для systemd

В папке /etc/systemd/system/ создать файлы

ssl-cert-renewal.service и ssl-cert-renewal.timer

ssl-cert-renewal.service
[Unit]
Description=SSL Cert Renewal
 
[Service]
ExecStart=/usr/bin/certbot renew --post-hook "systemctl reload nginx"
ssl-cert-renewal.timer
Description=Timer for SSL Cert Renewal
 
[Timer]
OnUnitActiveSec=12w
Unit=ssl-cert-renewal.service
 
[Install]
WantedBy=multi-user.target
Максим Буланов: обновлено 18.02.2019 в 22:44
Максим Буланов: обновлено 18.02.2019 в 22:44
Максим Буланов: обновлено 18.02.2019 в 22:46
Максим Буланов: обновлено 18.02.2019 в 22:47
Максим Буланов: обновлено 18.02.2019 в 22:48
Юрий Минц

Максим, в директуме 4.2 (и на верное 4.3) есть параметр ssl_cert_thumbprint с отпечатком сертификата. При установке RX на Linux и подключении letsencrypt  к nginx нужны дополнительные действия после каждого обновления сертификата ?

Авторизуйтесь, чтобы написать комментарий