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

Как принудительно использовать SSL (https) в Apache Location

Я пытаюсь принудительно использовать SSL (https) в репозитории SVN, обслуживаемом mod_dav_svn. Вот что у меня есть:

<Location /svn/projectname>
  DAV svn
  SVNPath /var/repo/projectname
  Require valid-user
  AuthType Basic
  AuthName "Subversion repository"
  AuthUserFile /etc/svn-auth-projectname

  #here's what I tried (didn't work)
  SSLCipherSuite HIGH:MEDIUM
</Location>

Однако меня не перенаправляют на https, когда я вхожу в систему через http; он остается в http. Почему вышеперечисленное не работает? Как мне заставить работать это перенаправление https?

Я видел предложения по использованию mod_rewrite, например:

# /dir/.htaccess
RewriteEngine on
RewriteCond %{SERVER_PORT}!443
RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L] 

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

Это не взлом. вот вам небольшая разбивка:

# Turn on Rewriting
RewriteEngine on 

# Apply this rule If request does not arrive on port 443
RewriteCond %{SERVER_PORT} !443 

# RegEx to capture request, URL to send it to (tacking on the captured text, stored in $1), Redirect it, and Oh, I'm the last rule.
RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]

Мы используем немного другой, но в основном эквивалентный синтаксис. Вместо того, чтобы проверять порт, на котором был получен запрос, мы проверяем, что HTTPS не используется. И мы используем %{HTTP_HOST} переменная среды, а не жесткое кодирование имени хоста.

  RewriteEngine              On
  RewriteCond     %{HTTPS}   Off
  RewriteRule     .*         https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Мне этот подход нравится немного больше, потому что он работает, когда Apache прослушивает нестандартные порты. Может возникнуть проблема с использованием %{HTTP_HOST} если ваш сайт находится за прокси, но мы этого еще не пробовали.

Пытаться

 <Location />
    SSLRequireSSL
 </Location>

Все определяем с именем Virtual hosts. Затем, если вы находитесь в <Virtualhost *:80> определения, вам не нужно проверять, не является ли это портом 443, вы уже знаете, что это не так. Затем вы можете просто принудительно перевести все, что достигает 80, до 443 с помощью следующего правила:

RewriteEngine On
RewriteRule ^(.)$ https://www.yourdomain.com/$1 [R,L]

В дополнение к уже упомянутому перенаправлению вы можете добавить Директива SSLRequireSSL на ваш Расположение контейнер, который откажет в доступе, если вы не используете HTTPS-соединение. Однако решение с VirtualHost для вашего сайта SVN, который слушает только *: 443, более элегантно.

Предполагая, что Apache 2:

Вы сделали все, кроме фактического включения SSL, судя по всему. Используйте команды «SSLEngine», «SSLCertificateFile» и «SSLCertificateKeyFile», как описано здесь:

Вам нужно будет сгенерировать и / или купить файлы PKI (сертификат SSL и соответствующий файл закрытого ключа) для команд SSLCertificate * File.

http://www.debianhelp.co.uk/apacheinstall.htm

# /dir/.htaccess
1. RewriteEngine on
2. RewriteCond %{SERVER_PORT}!443
3. RewriteRule ^(.*)$ https://www.x.com/dir/$1 [R,L]

Это говорит:

  1. Включить поддержку перенаправления и перезаписи URL
  2. Для всех подключений, которые не проходят через порт 443 (другими словами, все подключения без SSL)
  3. Перенаправьте их на ту же страницу под https://www.x.com/dir/. Итак, если они попросят http://www.x.com/y, они будут перенаправлены на x в каталоге сервера SSL: https://www.x.com/dir/x

Если ваш сайт сейчас поддерживает SSL, и вы просто пытаетесь принудительно использовать SSL в подкаталоге svn, вы можете попробовать что-то вроде:

1. RewriteEngine on
2. RewriteCond %{SERVER_PORT}!443
3. RewriteRule ^/svn/(.*)$ https://www.x.com/svn/$1 [R,L]

Что будет делать то же самое, что и выше, но только для вещей в каталоге subversion.

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

Использовать SSLRequireSSL в блоке Location