Порт перевода вызывает ошибку 400: Причина: вы говорите по обычному протоколу HTTP с портом сервера с поддержкой SSL.

Трансляция порта настроена на брандмауэре с общедоступным адресом для перенаправления https-запроса от https://customdomain.fr:8443 на https://localIP-apache-server.

Перевод работает хорошо, и страница index.php отображается правильно.

Когда я аутентифицируюсь на портале, URL-адрес изменяется на http вместо https, и появляется следующее сообщение:

Неверный запрос Ваш браузер отправил запрос, который этот сервер не может понять. Причина: вы говорите по обычному протоколу HTTP с портом сервера с поддержкой SSL. Вместо этого используйте схему HTTPS для доступа к этому URL, пожалуйста.

Если я заменю http на https, страница будет отображаться правильно.

Я использую вамп-сервер. В моем httpd.conf есть 2 VirtualhHost, один для порта 80 и один для порта 443. Оба порта прослушиваются. Я попытался включить RewriteRule в httpd.conf в VirtualHost 443:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule "^/?(.*)" "https://customdomain.fr:8443/$1" [L,R,NE]

Но ошибка 400 все равно возникает. Кажется, что Apache отправляет ошибку до того, как запрос будет прочитан VirtualHost 443.

Поэтому я попытался установить следующий код перед VirtualHost 443 в httpd.conf:

ErrorDocument 400  https://customdomain.fr:8443/aaa/bbb

У меня нет ошибки 400, но отображается страница https://customdomain.fr:8443/aaa/bbb/index.php, а не другая страница, например https://customdomain.fr:8443/aaa/bbb/order.php

Знаете ли вы, как отобразить запрошенную страницу с помощью ErrorDocument или другой способ решить мою проблему?


person PapiDid    schedule 04.06.2019    source источник
comment
Только не перенаправляйте на http. Использование HTTPS только для входа в систему было обычной практикой 10 лет назад, в настоящее время вы должны обслуживать всю страницу через HTTPS.   -  person Robert    schedule 04.06.2019
comment
https используется не только для аутентификации, но и для всего сайта.   -  person PapiDid    schedule 04.06.2019
comment
Но вы пишете the url is changed to http instead of https. Поскольку вы говорите о конфигурации пересылки, а не о неожиданном отказе от HTTP, я предположил, что это было сделано намеренно. Поэтому ваша страница не обслуживается полностью через HTTPS.   -  person Robert    schedule 04.06.2019
comment
Да, ваше право: браузер автоматически изменил https на http, изменение не производилось вручную, поэтому возникает ошибка 400. Я не эксперт по Apache, поэтому пока не нашел решения.   -  person PapiDid    schedule 04.06.2019


Ответы (1)


Я нашел решение: включите HSTS, добавив следующий код в httpd.conf:

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

В этом случае браузер отправляет все запросы через https и не через http. Проблема решена.

person PapiDid    schedule 04.06.2019
comment
Я бы назвал это обходным путем, а не решением. Чистым решением было бы адаптировать веб-приложение, работающее на сервере, и изменить все ссылки http:// на https://. - person Robert; 04.06.2019