Назад | Перейти на главную страницу

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, а не браузером. Даже если бы я мог загрузить такую ​​страницу и реализовать <meta> обновите на новый URL-адрес, который по-прежнему будет радовать наших пользователей, пока старый URL-адрес воспроизводится и удаляется из ссылок, кешей и т. д.

Я исправил это, включив 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-портам не могут генерировать ошибку, потому что браузер никогда не достигает точки установления канала связи.