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

Apache - перенаправить на https перед AUTH

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

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

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

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

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

Веб-приложение нашего клиента установлено в его каталоге веб-пользователей. Авторизация выполняется до правил mod_rewrite (https://serverfault.com/a/443185/253111), и мы не смогли заставить принятый ответ работать, поэтому mod_rewrite не подходил.

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

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

### INFO: Rewrites and redirects are handled after authorisation
### @link https://serverfault.com/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, который перенаправляет на правильный URL-адрес HTTPS.

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

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