Безопасное соединение
Статья описывает, как включить на сервере ТехноДок безопасное соединение по 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:
- Остановите сервер ТехноДок.
- Откройте файл
data/application.conf, раскомментируйте в секции[Kestrel:Endpoints:Https]ключи точки подключения и задайте их значения:Url— адрес и порт, на которых сервер принимает запросы по HTTPS;SslProtocols:0,SslProtocols:1— разрешённые версии протокола TLS;Certificate:Path— абсолютный путь к файлу сертификата;Certificate:KeyPath— абсолютный путь к файлу закрытого ключа, только для сертификата в формате PEM;Certificate:Password— пароль файла PFX или зашифрованного закрытого ключа. Если закрытый ключ PEM не зашифрован, ключCertificate:Passwordоставьте закомментированным.
- Если сервер должен принимать запросы и по HTTP, раскомментируйте ключ
Urlв секции[Kestrel:Endpoints:Http]. После включения HTTPS, пока этот ключ закомментирован, сервер принимает запросы только по HTTPS. - Запустите сервер ТехноДок.
Пример конфигурации с сертификатом в формате 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. По умолчанию перенаправление выключено, и сервер отвечает по обоим протоколам.
Чтобы включить перенаправление:
- Включите HTTPS, как описано в разделе «Включение HTTPS».
- Раскомментируйте в секции
[Kestrel:Endpoints:Https]ключEnableRedirectionи задайте значениеTrue. - Перезапустите сервер ТехноДок.
Пример конфигурации:
[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:
- Задайте в ключе
Urlсекции[Kestrel:Endpoints:Https]порт 443. - Закомментируйте ключ
Urlв секции[Kestrel:Endpoints:Http]или задайте в нём порт 80 и включите перенаправление, как описано в разделе «Включение перенаправления на HTTPS». - Раскомментируйте в секции
[Kestrel:Endpoints:Https]ключEnableHstsи задайте значениеTrue. - Если политика должна действовать не 30 дней, раскомментируйте ключ
HstsMaxAgeи задайте время действия в секундах. Значение по умолчанию —2592000. - Перезапустите сервер ТехноДок.
Пример конфигурации:
[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 недостаточно: сервер перестаёт отправлять заголовок, а браузер продолжает применять сохранённую политику.
Чтобы отменить выданную политику:
- Оставьте
EnableHsts = True, задайтеHstsMaxAge = 0и перезапустите сервер ТехноДок. Сервер отправляет заголовок с нулевым временем действия, и браузер сбрасывает политику при следующем обращении по HTTPS. - После того как пользователи открыли ТехноДок по HTTPS, задайте
EnableHsts = Falseи перезапустите сервер ТехноДок.
Если HTTPS на сервере уже не работает, сервер не может передать браузеру заголовок с нулевым временем действия. В этом случае сбросьте политику вручную в каждом браузере. В браузерах на основе Chromium это делается на странице chrome://net-internals/#hsts.