Я пытаюсь принудительно использовать 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]
Это говорит:
Если ваш сайт сейчас поддерживает 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