Почему тест SSL Labs говорит, что HSTS включен, когда заголовок отправляется через HTTP, но не при отправке через HTTPS?

Я пытаюсь настроить HSTS на своем сервере. Я заметил, что тест на SSLLabs.com сообщит мне, что HSTS включен, если я отправлю заголовок HSTS через начальное незашифрованное HTTP-соединение. Это, однако, является нарушением спецификации HSTS в соответствии с RFC-6797, раздел 7.2, в котором четко указано, что вы НЕ должны отправлять этот заголовок по незашифрованному соединению.

С другой стороны, если мой сервер отправляет этот заголовок HSTS ТОЛЬКО после выполнения перенаправления 302 с HTTP на HTTPS, что именно то, что вам СЛЕДУЕТ в официальной спецификации HSTS, тогда SSL Labs НЕ подтверждает, что у меня включен HSTS.

Так что мне здесь не хватает? Как правильно это сделать?


Если вы хотите понять, о чем я говорю, рассматриваемый сайт - nightowlcircusarts.com.

Вы можете просмотреть незашифрованные заголовки, используя curl с помощью этой команды bash:

curl -I http://www.nightowlcircusarts.com/

Или измените этот http на https, чтобы увидеть зашифрованные заголовки:

curl -I https://www.nightowlcircusarts.com/

В настоящее время я настроил его ТОЛЬКО на отправку этого заголовка через TLS, а не без него, как указано в спецификации HSTS. Но вы увидите, что тест SSL Labs по-прежнему показывает, что у меня НЕ включен HSTS: https://www.ssllabs.com/ssltest/analyze.html?d=nightowlcircusarts.com


person Craig Lewis    schedule 31.03.2017    source источник
comment
в разделе теста DROWN попробуйте посетить более подробное описание этого теста, а также там, где показаны отдельные проблемы, щелкните ссылки с дополнительной информацией, они должны помочь вам указать правильное направление   -  person Jpsh    schedule 31.03.2017
comment
Не понимаю, почему вы так думаете. Правильный ответ ниже.   -  person Barry Pollard    schedule 31.03.2017


Ответы (1)


Для начала ssllabs не проверяет сайты на незашифрованных соединениях - только на зашифрованных (https). Таким образом, он не скажет вам, что вы включили его на http.

Ваша проблема в том, что nightowlcircusarts.com и www.nightowlcircusarts.com - это два разных сайта, и вы настраиваете его только на последнем, но сканируете его на первом:

Теперь результаты сканирования показывают внизу, что пустой домен действительно перенаправляет на версию www, но ssllabs ставит задачу проверить соединение SSL / TLS (которое происходит до перенаправления), поэтому он намеренно не следует перенаправлениям и вместо этого сообщает Конфигурация подключения SSL / TLS. Он ожидает, что вы просканируете сайт перенаправления отдельно - именно для таких случаев, когда он настроен по-другому!

Я предполагаю, что когда вы «отправляете заголовок HSTS по начальному незашифрованному HTTP-соединению», на самом деле вы устанавливаете его везде (включая голый домен по https), поэтому вы думали, что он «сработал» когда ты это сделал.

Допустимо (и ожидается!) Устанавливать HSTS через перенаправления https-to-https. Фактически, ваш конкретный пример описан в RFC в разделе 11.4.1 .

Кстати, добавление HSTS к голому домену - лучшая практика, но убедитесь, что весь ваш домен обслуживается только через https. Если у вас есть один дочерний сайт (например, blog.example.com) или вы также используете его для непубличных сайтов, которые еще не защищены (например, intranet.example.com), это может вызвать проблемы. В этом случае вы можете добавить HSTS в пустой домен, но без опции includeSubdomain - хотя это не даст вам полной защиты HSTS.

Наконец, если вы проверяете различные заголовки безопасности сайта, а не конфигурацию SSL / TLS, тогда https://securityheaders.io - отличный сайт, и его запускать намного быстрее, чем весь набор тестов SSL / TLS, который выполняет ssllabs:

Обратите внимание, что эти два сайта проверяют разные вещи, поэтому один из них не заменяет другой (большой поклонник обоих!), Но некоторые настройки (HSTS и HPKP) отображаются на обоих. И при этом будьте очень осторожны с HPKP (я не фанат и не думаю, что он вообще должен широко использоваться).

person Barry Pollard    schedule 31.03.2017