Принудительный SSL на Apache, с аутентификацией и каноническим перенаправлением - PullRequest
4 голосов
/ 22 января 2011

Я прочитал несколько постов о том, как перенаправить на SSL, а также о том, как убедиться, что сайт использует поддомен / каноническое имя www, а также о том, как настроить Basic Auth. Вот что у меня есть в моем файле .htaccess прямо сейчас:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


RewriteEngine on
RewriteCond %{HTTP_HOST} !(^www\.site\.com*)$
RewriteRule (.*) https://www.site.com$1 [R=301,L]


AuthName "Locked"
AuthUserFile "/home/.htpasswd"
AuthType Basic
require valid-user

Это работает довольно хорошо, но я бы хотел оптимизировать его. Мои вопросы включают в себя:

  1. Как мне избежать двойной аутентификации? Когда я захожу на сайт w.o. SSL Я должен пройти аутентификацию, а затем я перенаправлен на SSL и должен снова пройти аутентификацию. Могу ли я просто быть перенаправлен и затем аутентифицирован?
  2. Похоже, первое правило довольно круто, потому что я могу использовать его на любом сайте, не изменяя его. Можно ли переписать правило № 2, чтобы оно было независимым от сайта? то есть: это заставит использовать www на любом сайте, независимо от того, какое доменное имя (с более качественным письменным правилом)? ответил здесь
  3. Как бы я сделал обратный номер 3 с правилом, которое будет работать на любом сайте, чтобы заставить сайт не использовать www, т.е. перенаправить на site.com с www.site.com? ответил здесь

Ответы [ 5 ]

5 голосов
/ 17 февраля 2012

Для # 1

Как избежать двойной аутентификации?Могу ли я просто быть перенаправлен и затем аутентифицирован?

Бум!Это работает.

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.askapache.com"
ErrorDocument 403 https://www.askapache.com/admin/

См .:

Просто поместите этот блок сверху на ваш .htaccess, вот мой:

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "www.askapache.com"
ErrorDocument 403 https://www.askapache.com/admin/

AuthType Digest
AuthName "Protected By AskApache"
AuthDigestDomain / https://www.askapache.com/admin/
AuthUserFile /home/askapache/.htpasswd-digest
Require valid-user
Satisfy All
3 голосов
/ 02 октября 2014

Если вы используете Apache 2.4, вы также можете избежать двойной аутентификации, используя разделы конфигурации .

# Redirect to HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

# Authenticate users only when using HTTPS
<If "%{HTTPS} == 'on'">
    AuthType Basic
    AuthName "Special things"
    AuthUserFile /etc/blah.htpasswd
    Require valid-user
</If>

Я дал более точную версию этого в моем ответе здесь .

2 голосов
/ 22 января 2011

Для # 1:

Установить Auth инструкции только на VirtualHost, который прослушивает *:443.У вас должно быть 2 виртуальных хоста, один прослушивающий порт 80 и один порт 443. Использование AuthType Basic для связи без SSL - большая проблема, имя пользователя и пароль просто закодированы в base64, поэтому в clear onвсе запросы (даже изображения или CSS), которые используются на вашем http-сервере!

1 голос
/ 13 февраля 2015

Это мое решение, чтобы предотвратить двойную аутентификацию предыдущих перезаписей, например:

RewriteCond %{HTTPS} ^off$ [NC]
RewriteCond %{REQUEST_URI} /administrator/*
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R,L]


<If "%{HTTPS} == 'on'">
  AuthType       Basic
  AuthName      "Authorization Required"
  AuthUserFile   /var/www/vHost/etc/HTTP-Basic-Auth/htaccess-Users
  AuthGroupFile  /var/www/vHost/etc/HTTP-Basic-Auth/htaccess-Groups
  #require       valid-user
  require        group Webmins
</If>

<Else>
  ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
</Else>

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

0 голосов
/ 08 февраля 2018

Спасибо за ответ выше, это помогает создать комбинированное решение https и www.Единственное, что меня беспокоит, так это наличие определенных условий, при которых аутентификация не запускается, позволяя кому-либо получить доступ без учетных данных.Я не уверен, что есть, но, возможно, вы, умные люди, можете сказать иначе.

Этот код перенаправляет не-www на www и http на https, с аутентификацией папки .htaccess.

Этосодержимое файла htaccess в каталоге, который вы хотите защитить:

RewriteEngine on
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/foldername/$1 [L,R=301]
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/foldername/$1 [L,R=301]

# Apache 2.4 If
<If "%{HTTPS} == 'on' && %{HTTP_HOST} =~ /www/">
AuthType Basic
AuthName "Protected folder"
AuthUserFile "/home/etc/.htpasswds/public_html/foldername/passwd"
require valid-user
</If>
...