Apache: HSTS перенаправление на нестандартный порт HTTP вызывает ошибку SSL [дубликат]

На этот вопрос уже есть ответ здесь:

Я прочитал несколько ответов на SF, и я не приблизился к решению. Моя проблема кажется немного специфичной...

Клиенты обращались к веб-серверу через порт 81. С общей тенденцией к HTTPS, служба была обновлена и установлена на стандартный порт 443. Что очень важно для моей истории, HSTS включена на новом HTTPS-сайте.

На порту 81 мы установили простой редирект Apache:

ServerName example.com
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://example.com/ [END,NE,R=permanent]

Это сработало. Доступ к http://example.com:81 автоматически перенаправляется на https://example.com/

Благодаря HSTS, однако, это работает только один раз. Я представляю, что многие пользователи заходят на сайт по ссылкам, из закладок, из кэшированного поиска Google... и автоматически перенаправляются на http://example.com:81. Даже автозаполнение моего браузера по-прежнему предлагает ссылку :81, так что, думаю, я не один такой.

Их браузеры, имеющие действующую политику HSTS, выполняют внутреннее обновление небезопасного запроса, в результате чего браузер отправляет запрос на https://example.com:81. Он не загружается из-за ошибки SSL - порт не настроен для SSL-трафика.

Таким образом, мне нужен способ перенаправить http://example.com:81 И https://example.com:81 на https://example.com

Я видел, как Webmin при доступе через http://example.com:10000 выдает пользовательское сообщение об ошибке, что сайт активен на HTTPS, которое генерируется Webmin, а не браузером. Даже если бы я смог заставить такую страницу загружаться и реализовать обновление до нового URL, это все равно порадовало бы наших пользователей, пока старый URL воспроизводится и удаляется из ссылок, кэшей и т.д.

1
задан 26 July 2018 в 16:04
1 ответ

Я исправил это, включив HTTPS на порту 81. Это сгенерировало ответ «400 Bad Request» при запросе версии HTTP (т.е. первый раз, когда запрос был сделан, прежде, чем HSTS сможет переопределить запрос). Я настроил Apache для ответа на 400 ошибок с помощью перенаправления:

ServerName example.com

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://example.com/ [END,NE,R=permanent]

ErrorDocument 400 https://example.com/

Это означает, что первые запросы направляются на сайт HTTPS с помощью перенаправления ошибок 400, а последующие запросы на нестандартный порт через HTTPS перенаправляются через RewriteRule .

HTTP-запросы к портам HTTPS могут показывать сгенерированную сервером ошибку (именно поэтому Webmin может показывать «хорошее» сообщение об ошибке). С другой стороны, HTTPS-запросы к HTTP-портам не могут генерировать ошибку, потому что браузер никогда не достигает точки установления канала связи.

1
ответ дан 3 December 2019 в 23:14

Теги

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