Apache - Перенаправление на https перед AUTH

У меня есть сайт для разработки, который требует имя пользователя и пароль (базовая авторизация http), прежде чем пользователь сможет увидеть сайт. Я хотел бы сначала перенаправить на безопасный протокол, прежде чем пользователь сможет отправить пароль в виде открытого текста. Любые мысли о том, как сделать это с помощью Apache? У меня есть доступ к файлам conf и.htaccess.

Конечные результаты будут:

http://xxxx/ - Когда пользователь заходит сюда, он сразу же перенаправляется на https:

https - когда пользователь попадает сюда, ему предлагается ввести имя пользователя / пароль.

5 ответов

Решение

Вы можете использовать директиву перенаправления на виртуальном хосте http, чтобы перенаправить на сайт https, где выполняется аутентификация. Вы также можете использовать mod_rewrite для перенаправления. Основные вещи - просто не устанавливать аутентификацию на виртуальном хосте http и перенаправлять все на виртуальный хост https, где выполняется аутентификация.

Независимо от того, как настроен хост SSL, я бы использовал эту конфигурацию для хоста без SSL:

<VirtualHost *:80>
    ServerName www.sitename.com
    ServerAlias sitename.com others-if-you-like.com
    ServerAdmin webmaster@sitename.com

    RedirectMatch ^/(.*)    https://www.sitename.com/$1 [L,R]

</VirtualHost>

Добавьте строки для вашей регистрации, но больше ничего не нужно. Все будет постоянно перенаправлено на URL-адрес https://, и.htaccess сайта SSL или другие элементы управления доступом не будут обрабатываться до окончания перенаправления.

Из этого поста я узнал об использовании <If> в .htaccess для Apache 2.4+:

<If "%{HTTPS} != 'on'">
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</If>
<Else>
AuthType Basic
AuthName "Login"
AuthUserFile /path/to/auth/file
Require valid-user
</Else>

Тем не менее, если у вас вообще есть http-версия сайта, вы ничего не можете сделать, чтобы помешать неправильно настроенному клиенту случайно отправить пароль в виде открытого текста в его первоначальном незашифрованном запросе.

Веб-приложение нашего клиента установлено в его каталоге веб-пользователей. Авторизация обрабатывается до правил mod_rewrite ( /questions/113223/kak-zastavit-avtorizatsiyuhtaccess-proishodit-cherez-ssl/113229#113229), и мы не можем получить принятый ответ для работы, поэтому mod_rewrite, кажется, не вариант.

В конце концов мы явно потребовали SSL и использовали корень веб-приложения через HTTPS в качестве документов об ошибках 403 и 404. Поэтому, когда кто-то посещает любую страницу по HTTP (которая является неавторизованной, следовательно, 403) или несуществующей страницей (404), он перенаправляется на ie. https://domain.tld/~WEBUSER/admin.

Это файл.htaccess с дополнительной информацией в комментариях.

### INFO: Rewrites and redirects are handled after authorisation
### @link https://faultserver.ru/a/443185/253111

### INFO: Log out of a HTPASSWD session
### This was not always possible, but Firefox and Chrome seem to end sessions
### when a new one is trying to be using ie.:
### https://logout:logout@DOMAIN.TLD/~WEBUSER/
### @link http://stackoverflow.com/a/1163884/328272

### FORCE SSL: Explicitly require the SSL certificate of a certain domain to
### disallow ie. unsigned certificates. ErrorDocument's are used to redirect
### the user to an HTTPS URL.
### @link http://forum.powweb.com/showthread.php?t=61566
SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire  %{HTTP_HOST} eq "DOMAIN.TLD"

### HTPASSWD AUTHENTICATION
AuthUserFile /var/www/vhosts/DOMAIN.TLD/web_users/WEBUSER/.htpasswd
AuthType Basic
AuthName "Hello"
Require valid-user

### ERROR DOCUMENTS: Redirect user in case of a 403 / 404.
ErrorDocument 403 https://DOMAIN.TLD/~WEBUSER/admin
ErrorDocument 404 https://DOMAIN.TLD/~WEBUSER/admin

Вы также можете увидеть эту запись в блоге здесь, которая объясняет, как это сделать с SSLRequireSSL, обычай ErrorDocument 403 директива, которая указывает на Perl-скрипт, который перенаправляет на правильный HTTPS-URL.

Если я правильно помню, базовая аутентификация http выполняется при первоначальном установлении связи перед установкой сеанса SSL. Таким образом, даже если вы входите на сервер SSL, базовая аутентификация выполняется в виде открытого текста. Это было одной из давних проблем с базовой аутентификацией. Возможно, один из других методов аутентификации http имеет дело с этим. Прошло много времени с тех пор, как я смотрел на это.

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