7 votes

Comment forcer SSL (https) sur Apache Location

J'essaie de forcer le SSL (https) sur un dépôt SVN servi par mod_dav_svn. Voici ce que j'ai :

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

Cependant, je ne suis pas redirigé vers https lorsque je me connecte via http ; il reste en http. Pourquoi la solution ci-dessus ne fonctionne-t-elle pas ? Comment faire pour que la redirection vers https fonctionne ?

J'ai vu des suggestions concernant l'utilisation de mod_rewrite, par exemple :

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

Cependant, je ne comprends pas exactement ce que cela fait, et j'ai donc peur de l'utiliser. De plus, cela ressemble plus à un affreux piratage qu'à une solution correcte.

0 votes

Vous ne pouvez pas effectuer la redirection et l'authentification dans le même serveur virtuel. Si vous tentez de le faire, l'authentification se fera en HTTP, avant la redirection vers HTTPS ! Ce n'est PAS bon ! Vous devez les faire dans des serveurs virtuels distincts. La redirection dans un serveur virtuel HTTP et l'authentification dans un serveur virtuel HTTPS.

9voto

xentek Points 351

Ce n'est pas un piratage. Voici une brève explication pour vous :

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

0 votes

Quelle serait la cause bad argument line '%{SERVER_PORT}!443' lors de l'utilisation de ce produit ?

0 votes

Vous avez déjà configuré SSL pour ce serveur virtuel ?

1 votes

L'exemple n'est pas tout à fait correct. Il faut un espace avant le !443 .

8voto

borrego Points 501

Nous utilisons une syntaxe légèrement différente, mais essentiellement équivalente. Plutôt que de vérifier le port sur lequel la requête a été reçue, nous vérifions que HTTPS n'est pas utilisé. Et nous utilisons la balise %{HTTP_HOST} plutôt que de coder en dur le nom de l'hôte.

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

J'aime un peu mieux cette approche, car elle fonctionne lorsqu'Apache écoute sur des ports non standard. Il pourrait y avoir un problème avec l'utilisation de %{HTTP_HOST} si votre site est derrière un proxy, mais nous n'avons pas encore essayé.

1 votes

Je pense que le %{HTTPS} n'est disponible que dans Apache 2.x ou quelque chose comme ça, d'où la relative prévalence de la vérification du port dans les exemples trouvés sur le net. C'est un meilleur moyen, comme vous l'avez souligné.

4voto

davykiash Points 161

Essayez

 <Location />
    SSLRequireSSL
 </Location>

2voto

Corey Points 504

Nous définissons tout avec le nom Hôtes virtuels. Ensuite, si vous êtes dans un <Virtualhost *:80> définition, vous n'avez pas besoin de vérifier si ce n'est pas le port 443, vous savez déjà que ce n'est pas le cas. Vous pouvez alors forcer tout ce qui passe par 80 à passer sur 443 avec une règle du type :

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

0 votes

Je suis tout à fait d'accord avec l'approche des hébergeurs. Je trouve que cela fonctionne et évite d'activer le moteur de réécriture : RedirectMatch 301 (.*) https://%{HTTP_HOST}$1

0 votes

RewriteRule ^/(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]

2voto

Crippeoblade Points 1301

En plus de la redirection déjà mentionnée, vous pourriez vouloir ajouter l'option Directive SSLRequireSSL a su Localisation qui refusera l'accès si vous n'utilisez pas une connexion HTTPS. Cependant, la solution avec un VirtualHost pour votre site SVN qui n'écoute que sur *:443 est plus élégante.

0 votes

Si nous parlons de sécurité, nous voulons utiliser un protocole, pas un port spécifique : celui-ci est sécurisé par le pare-feu...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X