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

Как я могу запретить Apache запрашивать учетные данные на сайте без SSL

У меня есть веб-сервер с несколькими виртуальными хостами. Некоторые из этих хостов имеют связанный ssl-сайт. У меня есть директива DirectoryMatch в моем основном файле конфигурации, которая требует базовой аутентификации для любого каталога с обеспечен как часть пути к каталогу. На сайтах с SSL-сайтом у меня есть правило перезаписи (расположенное в конфигурации, отличной от ssl для этого сайта), которое перенаправляет на SSL-сайт, тот же uri.

Проблема в том, что сайт http (80) сначала запрашивает учетные данные, а затем сайт https (443) снова запрашивает учетные данные. Я хотел бы запретить http-сайту запрашивать и, таким образом, избежать возможности того, что кто-то введет учетные данные и отправит их в виде открытого текста. Я знаю, что могу переместить DirectoryMatch на конкретный сайт и просто поместить инструкцию auth в конфигурацию SSL, но это приведет к тому, что при создании новых сайтов можно забыть о защите критических каталогов.

Вот соответствующие объявления: httpd.conf (все сайты):

<DirectoryMatch "_secured_">
    AuthType Basic
    AuthName "+ + + Restrcted Area on Server + + +"
    AuthUserFile /home/websvr/.auth/std.auth
    Require valid-user
</DirectoryMatch>

site.conf (для конкретного сайта)

<DirectoryMatch "_secured_">
    RewriteEngine On
    RewriteRule .*(_secured_.*) https://site.com/$1
</DirectoryMatch>

Есть ли способ оставить DirectoryMatch в основном файле конфигурации и предотвратить запрос авторизации с сайта http?

Запуск Apache 2 на сервере Ubuntu 10.04 из пакета по умолчанию. У меня для AllowOverride установлено значение none - я предпочитаю обрабатывать вещи в файлах конфигурации, а не в .htaccess.

Вы должны перезаписать перед запросом аутентификации.

Как выглядят ваши другие правила перезаписи? Если все они такие же, как в примере, вы можете переместить их в основной DirectoryMatch. Напишите чек, чтобы узнать, поддерживает ли сайт SSL. Если нет, перенаправьте.

Тогда аутентификация произойдет потом. Что-то вроде:

<DirectoryMatch "_secured_">

    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^.*(_secured_.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

    AuthType Basic
    AuthName "+ + + Restrcted Area on Server + + +"
    AuthUserFile /home/websvr/.auth/std.auth
    Require valid-user
</DirectoryMatch>