Советы по безопасной настройке TLS

Корректная настройка HTTPS-соединения критична для создания безопасного защищенного соединения, т.к. не все алгоритмы шифрования и не все настройки TLS обеспечивают достаточную защиту. В данной статье приведены рекомендации по корректной настройке TLS, которые должны быть настроены при использовании HTTPS для системы Docsvision. Также рекомендуется включить HSTS для всех web-сервисов.

Требования к настройке серверного сертификата

  1. Используйте только следующие версии протокола, рекомендованные 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 являются устаревшими и не рекомендуются к использованию.
  2. TLS-кривые: X25519, prime256v1, secp384r1.

  3. Тип сертификата: ECDSA (P-256) (рекомендуется), RSA (2048 бит).

  4. В параметрах Диффи-Хеллмана рекомендуется использовать размер ключа 2048 бит и профиль: ffdhe2048 (RFC 7919).

  5. Для всех HTTPS-соединений должна быть включена политика HSTS с максимальным сроком действия два года: max-age=63072000.

  6. Срок действия сертификата должен составлять от 90 дней (рекомендуется) до 366 дней (максимально допустимый).

  7. Выбор шифра "на усмотрение клиента" (client chooses).

Настройка TLS в Windows

  1. В соответствии с рекомендациями Microsoft наборы шифров в Windows могут быть настроены, используя:

    • Групповые политики Windows.

    • Реестр Windows.

    • PowerShell.

    • MDM (Mobile Device Management).

    Параметры TLS, заданные в реестре или с помощью групповых политик, применяются ко всей системе и влияют также на клиентское ПО, выполняющее TLS-соединения с данной машины.

  2. Укажите версии 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, измените параметры следующим образом: Http  Url  "https://*:5000". Обратите внимание, вместо Https в данной конфигурации указывается Http.
    2 SslProtocols — укажите версии TLS.
    3 Path — локальное расположение сертификата.
    4 KeyPath — локальное расположение ключа шифрования для сертификата.
  3. Настройте TLS-кривые. Для Windows 10 и Windows Server 2016, и набор ECC-кривых может быть настроен независимо от наборов шифров при помощи утилиты командной строки certutil.exe.

  4. Алгоритм подписи и тип ключа выбираются в момент выпуска сертификата.

  5. Параметры Диффи-Хеллмана по умолчанию могут отсутствовать в системе, в таком случае потребуется создать их вручную. Использование алгоритмов обмена ключами должно контролироваться настройкой порядка наборов шифрования. Следуйте рекомендациям Microsoft.

  6. Укажите настройки 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)

  7. Срок действия сертификата выбирается в момент выпуска.

Настройка TLS в Linux

Во многих дистрибутивах Linux конфигурационный файл OpenSSL располагается по адресу /etc/ssl/openssl.cnf, подробнее параметры конфигурации описаны в документации OpenSSL.

Задайте опции Open SSL:
  1. OpenSSL поддерживает две опции для задания наборов шифров:

    • Ciphersuites — задаёт набор шифров для TLSv1.3.

    • CipherString — задаёт набор шифров для TLSv1.2.

    Наборы шифров указываются через запятую, наборы для TLSv1.2 добавляются к TLSv1.3 и наоборот.

  2. Опция MinProtocol задаёт минимальный поддерживаемый протокол, рекомендуется использовать TLSv1.2 или TLSv1.3.

  3. ECC-кривые настраиваются при помощи опции Curves, синонимичной Groups.

  4. Алгоритм подписи и тип ключа выбираются в момент выпуска сертификата.

  5. Набор параметров Диффи-Хеллмана задаётся опцией DHParameters. Опция поддерживается, только если разрешены операции с сертификатом.

  6. Укажите настройки 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)

  7. Срок действия сертификата выбирается в момент выпуска.

  8. Убедитесь, что в параметре Options не указано ServerPreference, чтобы выбор оставался за клиентом. По умолчанию используется политика "на усмотрение клиента" (client chooses).