Как разрешить http на определенном поддомене с nginx? (HSTS)

Я пытаюсь протестировать свой сайт на промежуточном сайте, прежде чем запускать его. Очевидно, у него нет такого же сертификата.Когда я пытаюсь войти с поддоменом testing.domain.com, я получаю в firefox такую ​​ошибку:

 SSL_ERROR_BAD_CERT_DOMAIN
test.website.com имеет политику безопасности под названием HTTP Strict Transport Security (HSTS), что означает, что Firefox может подключаться к нему только безопасно. Вы не можете добавить исключение для посещения этого сайта.
upstream website {
    server 127.0.0.1:3000;
}

#prevent www
server {
  server_name www.website.com;
  return 301 $scheme://website.com$request_uri; 
}

#redirect http to https
server {
    listen 80;
    listen [::]:80;
    server_name website.com;

    return 301 https://$host$request_uri;
}

#https
server
{
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name website.com;

    include /etc/nginx/config/sites/headers.conf;

    include /etc/nginx/config/ssl/resolver.conf;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem;

    include /etc/nginx/config/ssl/ssl.conf;

    location /
    {
        proxy_pass http://website;

        include /etc/nginx/config/proxy/proxy.conf;
    }

    #include /etc/nginx/config/cache/static.conf;
}

Я добавил в этот серверный блок в надежде, что он будет обрабатывать HTTP-запросы, поступающие из тестового субдомена:

#allow http through testing subdomain
server {
    listen 80;
    listen [::]:80;
    server_name testing.website.com;

    location /
    {
        proxy_pass http://website;
        include /etc/nginx/config/proxy/proxy.conf; 
    }
}

И я обнаружил, что в headers.conf есть строка с

   add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

, поэтому я удалил includeSubDomains в надежде, что это отключит HSTS.

Даже после этих изменений он по-прежнему выполняет перенаправление с http://testing.website.com на https://testing.website.com , а затем выдает мне HSTS ошибка.

Каждый раз, когда я вношу изменения, я выполняю либо nginx -s reload , либо перезагружаю весь сервер, но ни то, ни другое не имеет значения.

1
задан 15 October 2019 в 06:18
1 ответ

У вас есть 2 проблемы с HSTS, потенциально 3.

Во-первых, вы выбрали includeSubDomains , что означает, что ваш NGINX сообщает браузерам, что каждый субдомен, включая корень, example.com использует только HTTPS. Более того, он сказал браузерам кэшировать это значение на 63072000 секунд, иначе. 730 дней, а точнее 2 года. Это означает, что любой браузер, посетивший любую страницу example.com, принудительно перенаправит на HTTPS, если увидит example.com в адресе.

Единственный способ обойти это - удалить IncludeSubDomains и использовать только что установленный браузер или развернуть сертификат на сайте testing.example.com. Это может работать даже с самоподписанным сертификатом, я никогда не пробовал лично.

Но здесь может быть еще большая проблема. Вы конфигурируете также параметр preload , который указывает, что страница готова к добавлению в список предварительной загрузки HSTS. Список предварительной загрузки HSTS - это список сайтов, использующих HSTS, жестко запрограммированный в браузерах. Это означает, что невозможно обойти HSTS даже при недавно установленном браузере, поскольку браузер заранее знает, какие сайты используют HSTS. Вам необходимо вручную добавить свой сайт в этот список, поэтому маловероятно, что ваш домен находится в этом списке, но если вы не настраивали этот конкретный сайт, вы никогда не узнаете, что кто-то сделал до вас.В этом случае единственный способ обойти это - просто включить HSTS на каждом поддомене example.com.

0
ответ дан 17 February 2020 в 11:44

Теги

Похожие вопросы