Странный http -> перенаправление https, хотя не настроен

Я использую Apache 2.2.15 (CentOS 6.6) с доменом только для HTTP

demo.xml-director.info

Используя wget, я могу получить содержимое правильно

 wget -S http://demo.xml-director.info
--2015-01-05 13:31:41--  http://demo.xml-director.info/
Resolving demo.xml-director.info (demo.xml-director.info)... 176.9.146.28
Connecting to demo.xml-director.info (demo.xml-director.info)|176.9.146.28|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Date: Mon, 05 Jan 2015 12:31:41 GMT
  Server: Zope/(2.13.22, python 2.7.6, linux2) ZServer/1.1
  Content-Length: 20227
  Expires: Sat, 01 Jan 2000 00:00:00 GMT
  Content-Type: text/html;charset=utf-8
  X-Ua-Compatible: IE=edge,chrome=1
  Content-Language: en
  Vary: Accept-Encoding
  Keep-Alive: timeout=15, max=100
  Connection: Keep-Alive
Length: 20227 (20K) [text/html]
Saving to: 'index.html.4'

Однако Chrome/Firefox всегда изменяют запрос с http на https из-за HTST. Однако для этого конкретного домена не настроен HSTS.

Сервер запускает SSL для www.xml-director.info с включенной поддержкой HSTS. Однако здесь есть еще один псевдоним, который будет отображать demo.xml-director.info на www.xml-director.info.

Как эта проблема может быть решена.

VHOst для www.xml-director.info:

<VirtualHost *:443>
    ServerName www.xml-director.info
    ServerAlias xml-director.info

    SSLEngine on
    SSLCertificateFile /etc/httpd/certs/15742445repl_2.crt
    SSLCertificateCHainFile /etc/httpd/certs/15742445repl_2.ca-bundle
    SSLCertificateKeyFile /etc/httpd/certs/zopyx.com.key

    CustomLog /var/log/httpd/xml-director.info.log combined
    DocumentRoot /var/www/xml-director/landing-v1

    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

    <location "/">
        Options +Indexes
        Header set Access-Control-Allow-Origin "*"
        Header set Access-Control-Allow-Methods "GET,PUT,POST,DELETE"
    Header set Access-Control-Allow-Headers "X-Requested-With,Content-Type"
    </location>

</VirtualHost>

<VirtualHost *:80>
    ServerAlias www.xml-director.com 
    ServerAlias www.xml-director.info
    ServerAlias www.xml-director.de
    ServerAlias xml-director.com
    ServerAlias xml-director.info
    ServerAlias xml-director.de

    RedirectPermanent / https://xml-director.info/
</VirtualHost>

и для demo.xml-director.info

<VirtualHost *:80>
    ServerName  demo.xml-director.info
    RewriteEngine On

    RewriteRule ^/(.*) http://127.0.0.1:12020/VirtualHostBase/http/demo.xml-director.info:80/xml-director/VirtualHostRoot/$1 [L,P]
    RewriteRule ^/$    http://127.0.0.1:12020/VirtualHostBase/http/demo.xml-director.info:80/xml-director/VirtualHostRoot/$1 [L,P]

    CustomLog /var/log/httpd/demo.xml-director.info.log combined
    AddOutputFilterByType DEFLATE text/html text/xml text/plain text/css text/javascript

    CacheRoot /tmp/cache
    CacheEnable disk /
    CacheIgnoreCacheControl on

    KeepAliveTimeout 15
    KeepAlive on

    ExpiresActive On
    ExpiresByType image/gif "access plus 10 day"
    ExpiresByType image/jpg "access plus 10 day"
    ExpiresByType image/jpeg "access plus 10 day"
    ExpiresByType image/png "access plus 10 day"
    ExpiresByType text/javascript "access plus 10 day"
    ExpiresByType text/html  "access plus 1 hour"
    ExpiresByType text/html  "access plus 1 hour"
    ExpiresByType text/css  "access plus 10 days"

    <Location "/">
        Order allow,deny
        Allow from all
    </Location>

</VirtualHost>

1 ответ

Решение

Строгий-Транспорт-Безопасность - includeSubdomains

Проблема заключается в объеме заголовка HSTS, он включает в себя все субдомены. Если доступ http://demo.xml-director.info с браузером сначала все будет работать нормально.

Однако при первом доступе к https://xml-director.info/ или же https://www.xml-director.info браузер получит заголовок HSTS для всех поддоменов, для которых истекает срок действия в будущем (через два года...?), и, следовательно, не будет пытаться подключиться к любому (суб) домену через http снова, пока не истечет срок действия заголовка.

Между прочим, этот заголовок не влияет на такие инструменты Cli, как wget а также curl,

Не включать субдомены

Если есть субдомены, к которым нужно получить доступ через http - не используйте includeSubdomains, Вместо этого, если вы хотите использовать заголовок HSTS, ограничьте его только доступным доменом (это поведение по умолчанию):

<VirtualHost *:443>
    ServerName www.xml-director.info
    ServerAlias xml-director.info

    Header always set Strict-Transport-Security "max-age=63072000"

Исправление нежелательных заголовков HSTS

Браузер, который получил заголовок HSTS, не имеет средств для его очистки, он всегда будет пытаться получить доступ к домену через https, что, если нет ответа, означает, что он застрял в подвешенном состоянии.

Чтобы исправить текущую ситуацию в существующих браузерах (при условии, что это не проблема "только меня"), необходимо истечь заголовок HSTS через соединение https. то есть:

<VirtualHost *:443>
    ServerName *.xml-director.info

    Header always set Strict-Transport-Security "max-age=0"
    RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI}

Или эквивалент. Таким образом, заголовок HSTS очищается, а доступ http восстанавливается.

Другие вопросы по тегам