Como forçar o SSL (https) no local do Apache

6

Estou tentando forçar o SSL (https) em um repositório SVN servido por mod_dav_svn. Aqui está o que eu tenho:

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

No entanto, não sou redirecionado para https quando faço login via http; fica em http. Por que o trabalho acima não funciona? Como faço para que esse redirecionamento https funcione?

Eu já vi sugestões sobre o uso de mod_rewrite, por exemplo:

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

No entanto, não entendo exatamente o que isso significa, então tenho medo de usá-lo. Além disso, parece mais um hack feio do que a solução correta.

    
por Joey Adams 24.10.2009 / 05:35

8 respostas

9

Não é um hack. aqui está uma rápida análise para você:

# 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]
    
por 29.10.2009 / 12:20
8

Usamos uma sintaxe ligeiramente diferente, mas principalmente equivalente. Em vez de verificar a porta em que a solicitação foi recebida, verificamos se o HTTPS não está sendo usado. E usamos a variável de ambiente %{HTTP_HOST} em vez de codificar o nome do host.

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

Eu gosto dessa abordagem um pouco melhor, porque funciona quando o Apache está escutando em portas não padrão. Pode haver um problema com o uso de %{HTTP_HOST} se o seu site estiver atrás de um proxy, mas ainda não tentamos isso.

    
por 01.09.2014 / 20:39
2

Definimos tudo com o nome de hosts virtuais. Então, se você estiver dentro de uma definição <Virtualhost *:80> , você não precisa verificar se não é a porta 443, você já sabe que não é. Você pode, então, forçar tudo o que atingir 80 para 443 com uma regra como:

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

Além do redirecionamento já mencionado, talvez você queira adicionar a diretiva SSLRequireSSL a seu contêiner Localização que negará o acesso se você não usar uma conexão HTTPS. No entanto, a solução com um VirtualHost para o seu site SVN que apenas escuta em *: 443 é mais elegante.

    
por 24.10.2009 / 11:54
2

Tente

 <Location />
    SSLRequireSSL
 </Location>
    
por 26.09.2013 / 21:33
1

Assumindo o Apache 2:

Você fez tudo, exceto ativar o SSL pela aparência das coisas. Use os comandos "SSLEngine", "SSLCertificateFile" e "SSLCertificateKeyFile", conforme descrito aqui:

Você precisará gerar e / ou comprar os arquivos PKI (certificado SSL e arquivo de chave privada relacionado) para os comandos SSLCertificate * File.

link

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

Isso diz:

  1. Ativar redirecionamento de URL e suporte a reescrita
  2. Para todas as conexões que não vêm pela porta 443 (em outras palavras, todas as conexões não SSL)
  3. Redirecione-os para a mesma página, no link . Portanto, se eles solicitarem o link , eles serão redirecionados para x no diretório do servidor SSL: link

Se o seu site suporta SSL agora, e você está apenas tentando forçar o SSL no subdiretório svn, você pode tentar algo como:

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

O que faria o mesmo que acima, mas apenas para coisas no diretório subversion.

    
por 25.10.2009 / 08:56
0

O que você quer fazer é forçar um redirecionamento para https para conexões regulares da web. As regras de reescrita parecem conseguir isso. Isso não é um hack feio, mas sim a maneira correta de fazê-lo. Sua configuração atual não força um redirecionamento .

    
por 24.10.2009 / 06:17
0

Use SSLRequireSSL no bloco Location

    
por 23.09.2013 / 13:09

Tags