Перейти к основному содержимому

Безопасное соединение

Статья описывает, как включить на сервере ТехноДок безопасное соединение по HTTPS, перенаправление запросов с HTTP на HTTPS и заголовок HSTS. Настройки задаются в секциях [Kestrel:Endpoints:Http] и [Kestrel:Endpoints:Https] файла data/application.conf и вступают в силу после перезапуска сервера. По умолчанию ключи обеих секций закомментированы, и сервер принимает запросы только по HTTP на порту 8003.

Включение HTTPS​

Когда HTTPS включён, сервер принимает запросы по HTTPS на адресе и порту из ключа Url секции [Kestrel:Endpoints:Https]. Для HTTPS нужен сертификат сервера в формате PFX или PEM. Для сертификата в формате PEM нужен также файл закрытого ключа.

Чтобы включить HTTPS:

  1. Остановите сервер ТехноДок.
  2. Откройте файл data/application.conf, раскомментируйте в секции [Kestrel:Endpoints:Https] ключи точки подключения и задайте их значения:
    • Url — адрес и порт, на которых сервер принимает запросы по HTTPS;
    • SslProtocols:0, SslProtocols:1 — разрешённые версии протокола TLS;
    • Certificate:Path — абсолютный путь к файлу сертификата;
    • Certificate:KeyPath — абсолютный путь к файлу закрытого ключа, только для сертификата в формате PEM;
    • Certificate:Password — пароль файла PFX или зашифрованного закрытого ключа. Если закрытый ключ PEM не зашифрован, ключ Certificate:Password оставьте закомментированным.
  3. Если сервер должен принимать запросы и по HTTP, раскомментируйте ключ Url в секции [Kestrel:Endpoints:Http]. После включения HTTPS, пока этот ключ закомментирован, сервер принимает запросы только по HTTPS.
  4. Запустите сервер ТехноДок.

Пример конфигурации с сертификатом в формате PFX:

[Kestrel:Endpoints:Http]
Url = http://0.0.0.0:8003
#
[Kestrel:Endpoints:Https]
Url = https://0.0.0.0:8004
SslProtocols:0 = Tls12
SslProtocols:1 = Tls13
Certificate:Path = /opt/SMS-Automation/certs/technodoc.pfx
Certificate:Password = password

Пример ключей сертификата в формате PEM с незашифрованным закрытым ключом:

Certificate:Path = /opt/SMS-Automation/certs/technodoc.pem
Certificate:KeyPath = /opt/SMS-Automation/certs/technodoc-key.pem

Пользователи открывают ТехноДок по адресу сервера с портом HTTPS, например https://technodoc.server:8004. Если сертификат выдан внутренним центром сертификации организации, добавьте корневой сертификат этого центра в доверенные на компьютерах пользователей. Иначе браузер показывает предупреждение о небезопасном соединении.

Включение перенаправления на HTTPS​

Когда перенаправление включено, сервер отвечает на запрос по HTTP перенаправлением на тот же адрес по HTTPS. Порт для перенаправления берётся из ключа Url секции [Kestrel:Endpoints:Https]. Если порт определить не удалось, используется порт 443. По умолчанию перенаправление выключено, и сервер отвечает по обоим протоколам.

Чтобы включить перенаправление:

  1. Включите HTTPS, как описано в разделе «Включение HTTPS».
  2. Раскомментируйте в секции [Kestrel:Endpoints:Https] ключ EnableRedirection и задайте значение True.
  3. Перезапустите сервер ТехноДок.

Пример конфигурации:

[Kestrel:Endpoints:Http]
Url = http://0.0.0.0:8003
#
[Kestrel:Endpoints:Https]
Url = https://0.0.0.0:8004
SslProtocols:0 = Tls12
SslProtocols:1 = Tls13
Certificate:Path = /opt/SMS-Automation/certs/technodoc.pfx
Certificate:Password = password
EnableRedirection = True

Включение HSTS​

Когда HSTS включён, сервер отправляет браузеру заголовок Strict-Transport-Security. Получив заголовок, браузер в течение заданного времени обращается к серверу только по HTTPS и сам заменяет HTTP на HTTPS. По умолчанию HSTS выключен.

Сервер отправляет заголовок, только если в адресе запроса не указан порт. Поэтому HTTPS должен работать на порту 443. Браузер применяет политику HSTS ко всему узлу, а не к отдельному порту, поэтому точка подключения по HTTP на нестандартном порту, например 8003, после включения HSTS становится недоступной.

Чтобы включить HSTS:

  1. Задайте в ключе Url секции [Kestrel:Endpoints:Https] порт 443.
  2. Закомментируйте ключ Url в секции [Kestrel:Endpoints:Http] или задайте в нём порт 80 и включите перенаправление, как описано в разделе «Включение перенаправления на HTTPS».
  3. Раскомментируйте в секции [Kestrel:Endpoints:Https] ключ EnableHsts и задайте значение True.
  4. Если политика должна действовать не 30 дней, раскомментируйте ключ HstsMaxAge и задайте время действия в секундах. Значение по умолчанию — 2592000.
  5. Перезапустите сервер ТехноДок.

Пример конфигурации:

[Kestrel:Endpoints:Http]
Url = http://0.0.0.0:80
#
[Kestrel:Endpoints:Https]
Url = https://0.0.0.0:443
SslProtocols:0 = Tls12
SslProtocols:1 = Tls13
Certificate:Path = /opt/SMS-Automation/certs/technodoc.pfx
Certificate:Password = password
EnableRedirection = True
EnableHsts = True
HstsMaxAge = 2592000

Если после включения HSTS браузер не переходит на HTTPS или в ответах сервера нет заголовка, причины описаны в разделе «HSTS не действует» статьи «Устранение неполадок».

Отключение HSTS​

Браузер запоминает политику HSTS на время из HstsMaxAge и до его истечения обращается к серверу только по HTTPS. Поэтому выключить ключ EnableHsts недостаточно: сервер перестаёт отправлять заголовок, а браузер продолжает применять сохранённую политику.

Чтобы отменить выданную политику:

  1. Оставьте EnableHsts = True, задайте HstsMaxAge = 0 и перезапустите сервер ТехноДок. Сервер отправляет заголовок с нулевым временем действия, и браузер сбрасывает политику при следующем обращении по HTTPS.
  2. После того как пользователи открыли ТехноДок по HTTPS, задайте EnableHsts = False и перезапустите сервер ТехноДок.

Если HTTPS на сервере уже не работает, сервер не может передать браузеру заголовок с нулевым временем действия. В этом случае сбросьте политику вручную в каждом браузере. В браузерах на основе Chromium это делается на странице chrome://net-internals/#hsts.