Советы по безопасной настройке TLS
Корректная настройка HTTPS-соединения критична для создания безопасного защищенного соединения, т.к. не все алгоритмы шифрования и не все настройки TLS обеспечивают достаточную защиту. В данной статье приведены рекомендации по корректной настройке TLS, которые должны быть настроены при использовании HTTPS для системы Docsvision. Также рекомендуется включить HSTS для всех web-сервисов.
Требования к настройке серверного сертификата
-
Используйте только следующие версии протокола, рекомендованные Mozilla:
-
TLS 1.3 со следующим набором шифров:
TLS_AES_128_GCM_SHA256 TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 -
TLS 1.2 со следующим набором шифров:
ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-CHACHA20-POLY1305 ECDHE-RSA-CHACHA20-POLY1305 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-CHACHA20-POLY1305
Протоколы TLS 1.0, TLS 1.1, SSLv2, SSLv3 являются устаревшими и не рекомендуются к использованию. -
-
TLS-кривые:
X25519,prime256v1,secp384r1. -
Тип сертификата: ECDSA (P-256) (рекомендуется), RSA (
2048бит). -
В параметрах Диффи-Хеллмана рекомендуется использовать размер ключа
2048бит и профиль:ffdhe2048(RFC 7919). -
Для всех HTTPS-соединений должна быть включена политика HSTS с максимальным сроком действия два года:
max-age=63072000. -
Срок действия сертификата должен составлять от 90 дней (рекомендуется) до 366 дней (максимально допустимый).
-
Выбор шифра "на усмотрение клиента" (
client chooses).
Настройка TLS в Windows
-
В соответствии с рекомендациями Microsoft наборы шифров в Windows могут быть настроены, используя:
-
Групповые политики Windows.
-
PowerShell.
-
MDM (Mobile Device Management).
Параметры TLS, заданные в реестре или с помощью групповых политик, применяются ко всей системе и влияют также на клиентское ПО, выполняющее TLS-соединения с данной машины.
-
-
Укажите версии TLS, используемые системой, в конфигурационном файле
appsettings.jsonмодулей Docsvision.Фрагмент конфигурационного файла:{ "AllowedHosts": "*", "Kestrel": { "Endpoints": { "Https": { "Url": "https://*:5020", (1) "SslProtocols": ["Tls12", "Tls13"], (2) "Certificate": { "Path": "/folder/certificate.crt", (3) "KeyPath": "/folder/docsvision.key" (4) } } } } }1 Url— адрес и порт для доступа по HTTPS. При такой конфигурации сервис будет прослушивать одновременно два порта: стандартный5000для HTTP и5020для HTTPS. Чтобы использовать стандартный порт5000для подключения по HTTPS, измените параметры следующим образом: . Обратите внимание, вместоHttpsв данной конфигурации указываетсяHttp.2 SslProtocols— укажите версии TLS.3 Path— локальное расположение сертификата.4 KeyPath— локальное расположение ключа шифрования для сертификата. -
Настройте TLS-кривые. Для Windows 10 и Windows Server 2016, и набор ECC-кривых может быть настроен независимо от наборов шифров при помощи утилиты командной строки
certutil.exe. -
Алгоритм подписи и тип ключа выбираются в момент выпуска сертификата.
-
Параметры Диффи-Хеллмана по умолчанию могут отсутствовать в системе, в таком случае потребуется создать их вручную. Использование алгоритмов обмена ключами должно контролироваться настройкой порядка наборов шифрования. Следуйте рекомендациям Microsoft.
-
Укажите настройки HSTS в конфигурационных файлах модулей системы:
{ "AllowedHosts": "*", "Kestrel": { "Endpoints": { "Https": { // См. выше } } }, "Hsts": { "Enable": true, (1) "MaxAge": 31536000, (2) "IncludeSubDomains": true, (3) "Preload": true, (4) "RedirectHttpToHttps": true (5) } }-
Enable— включить HSTS (по умолчанию true) -
MaxAge— максимальный срок действия HSTS (неотрицательное число в секундах, по умолчанию 31536000) -
IncludeSubDomains— включать ли домены третьего уровня (по умолчанию true) -
Preload— добавлять ли в глобальный preload-список (по умолчанию true) -
RedirectHttpToHttps— автоматически перенаправлять HTTP to HTTPS (по умолчанию true)
-
-
Срок действия сертификата выбирается в момент выпуска.
Настройка TLS в Linux
Во многих дистрибутивах Linux конфигурационный файл OpenSSL располагается по адресу /etc/ssl/openssl.cnf, подробнее параметры конфигурации описаны в документации OpenSSL.
-
OpenSSL поддерживает две опции для задания наборов шифров:
-
Ciphersuites— задаёт набор шифров для TLSv1.3. -
CipherString— задаёт набор шифров для TLSv1.2.
Наборы шифров указываются через запятую, наборы для TLSv1.2 добавляются к TLSv1.3 и наоборот.
-
-
Опция
MinProtocolзадаёт минимальный поддерживаемый протокол, рекомендуется использовать TLSv1.2 или TLSv1.3. -
ECC-кривые настраиваются при помощи опции
Curves, синонимичнойGroups. -
Алгоритм подписи и тип ключа выбираются в момент выпуска сертификата.
-
Набор параметров Диффи-Хеллмана задаётся опцией
DHParameters. Опция поддерживается, только если разрешены операции с сертификатом. -
Укажите настройки HSTS в конфигурационных файлах модулей системы:
{ "AllowedHosts": "*", "Kestrel": { "Endpoints": { "Https": { // См. выше } } }, "Hsts": { "Enable": true, (1) "MaxAge": 31536000, (2) "IncludeSubDomains": true, (3) "Preload": true, (4) "RedirectHttpToHttps": true (5) } }-
Enable— включить HSTS (по умолчанию true) -
MaxAge— максимальный срок действия HSTS (неотрицательное число в секундах, по умолчанию 31536000) -
IncludeSubDomains— включать ли домены третьего уровня (по умолчанию true) -
Preload— добавлять ли в глобальный preload-список (по умолчанию true) -
RedirectHttpToHttps— автоматически перенаправлять HTTP to HTTPS (по умолчанию true)
-
-
Срок действия сертификата выбирается в момент выпуска.
-
Убедитесь, что в параметре
Optionsне указаноServerPreference, чтобы выбор оставался за клиентом. По умолчанию используется политика "на усмотрение клиента" (client chooses).