web-dev-qa-db-ja.com

Apacheの場所でSSL(https)を強制する方法

Mod_dav_svnが提供するSVNリポジトリでSSL(https)を強制しようとしています。ここに私が持っているものがあります:

<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>

ただし、http経由でログインしても、httpsにリダイレクトされません。 httpのままです。上記が機能しないのはなぜですか?このhttpsリダイレクトを機能させるにはどうすればよいですか?

私はmod_rewriteの使用に関する提案を見てきました、例えば:

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

ただ、何をやっているのかよくわからないので使ってみませんか。さらに、それは正しいソリューションよりも醜いハックのように見えます。

7
Joey Adams

それはハックではありません。ここにあなたのための簡単な内訳があります:

# 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]
9
xentek

少し異なりますが、ほとんど同等の構文を使用します。リクエストが受信されたポートをチェックするのではなく、HTTPSが使用されていないことをチェックします。また、ホスト名をハードコーディングするのではなく、%{HTTP_Host}環境変数を使用しています。

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

Apacheが標準以外のポートでリッスンしているときに機能するため、このアプローチは少し良くなっています。サイトがプロキシの背後にある場合、%{HTTP_Host}の使用に問題がある可能性がありますが、まだ試していない。

8
Michael

試す

 <Location />
    SSLRequireSSL
 </Location>
4
davykiash

仮想ホストという名前ですべてを定義します。次に、<Virtualhost *:80>定義。ポート443でないかどうかを確認する必要はありません。次のようなルールを使用して、80に到達するすべてのものを443に強制することができます。

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

上記のリダイレクトに加えて、HTTPS接続を使用しない場合にアクセスを拒否する SSLRequireSSLディレクティブLocation コンテナに追加することができます。ただし、*:443でのみリッスンするSVNサイトのVirtualHostを使用するソリューションは、よりエレガントです。

2
joschi

Apache 2を想定:

実際に見て実際にSSLを有効にすることを除いて、すべてを実行しました。ここで説明されているように、「SSLEngine」、「SSLCertificateFile」、および「SSLCertificateKeyFile」コマンドを使用します。

SSLCertificate * Fileコマンド用のPKIファイル(SSL証明書および関連する秘密鍵ファイル)を生成または購入する必要があります。

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 を要求すると、SSLサーバーのディレクトリの下にあるxにリダイレクトされます: https://www.x.com/dir/x

サイトでSSLがサポートされていて、svnサブディレクトリでSSLを強制しようとしているだけの場合は、次のようにします。

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

これは上記と同じことを行いますが、Subversionディレクトリの下にあるものに対してのみです。

1
Lee B

あなたがしたいことは、通常のWeb接続のためにredirecthttpsに強制することです。書き換えルールはそれを達成しているようです。これは醜いハックではなく、正しい方法です。現在の構成ではredirectは強制されません。

0
sybreon

LocationブロックでSSLRequireSSLを使用する

0
shved