Utilisation de la négation dans la directive LocationMatch

notre site fonctionne sur apache et est sécurisé à l'aide de certificats clients. Jusqu'à présent il n'y avait qu'un seul certificat, qui donnerait accès à l'ensemble du site. Maintenant, nous avons l'obligation d'exposer jira à un nouveau groupe d'utilisateurs qui ne devraient pas pouvoir accéder à autre chose que jira. J'ai créé un certificat séparé pour ce groupe et prévu de les distinguer en utilisant la combinaison SSLRequire et Location/LocationMatch.

donc les critères est:

  1. les utilisateurs avec un ancien certificat peuvent accès au site complet
  2. les utilisateurs avec un nouveau certificat ne peuvent accéder qu'à / Jira URL pattern

j'ai essayé peu de combinaisons mais je n'ai pas réussi à obtenir la négation pour le travail de localisation. Toute aide serait appréciée.

Le httpd.fichier conf, ressemble à ceci:

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /etc/apache2/ssl/myca.crt

<Location /jira> 
   SSLRequire   %{SSL_CLIENT_S_DN_CN} in {"AllUsers", "JiraUsers"}
</Location> 

<LocationMatch /!(jira)> 
   SSLRequire   %{SSL_CLIENT_S_DN_CN} eq "AllUsers"
</LocationMatch>
10
demandé sur 030 2009-01-12 19:23:05

5 réponses

https://issues.apache.org/bugzilla/show_bug.cgi?id=10932

Je ne sais pas si elle a été corrigée dans la dernière version d'apache.

comme solution de contournement, utilisez:

<LocationMatch "/[^s][^t][^a][^t][^i][^c]">
</LocationMatch>

ou

<LocationMatch "^/(?!static)">
</LocationMatch>
13
répondu Marc MAURICE 2015-04-05 23:30:07

essayez celui-ci : (merci Milos pour l'astuce)

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /etc/apache2/ssl/myca.crt

<Location /jira> 
   SSLRequire   %{SSL_CLIENT_S_DN_CN} in {"AllUsers", "JiraUsers"}
</Location> 

<LocationMatch "^/(?!jira)"> 
   SSLRequire   %{SSL_CLIENT_S_DN_CN} eq "AllUsers"
</LocationMatch>
3
répondu Amol 2011-11-15 01:23:08

Apache2 utilise pcre supportant la syntaxe perl5 RE et ceci est possible en utilisant l'anticipation négative comme décrit sur http://perldoc.perl.org/perlre.html#Extended-Patterns.

2
répondu Milos Jakubicek 2009-10-27 02:37:43

c'était une question d'avoir la bonne regex. La directive LocationMatch avec la regex suivante a bien fonctionné.

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /etc/apache2/ssl/myca.crt

<Location /jira> 
   SSLRequire   %{SSL_CLIENT_S_DN_CN} in {"AllUsers", "JiraUsers"}
</Location> 

<LocationMatch ^/[a-ik-zA-IK-Z]> 
   SSLRequire   %{SSL_CLIENT_S_DN_CN} eq "AllUsers"
</LocationMatch>
1
répondu 2009-01-12 20:10:16

Cela pourrait être pratique d'avoir, rendre invisible tout fichier caché/répertoire (protéger .Git. ,htaccess, etc...) et toujours permettre l'accès à /.connu/ Peut être installé dans n'importe quel serveur virtuel apache 2.4 ou directement dans apache2.conf

comme j'en avais besoin et que je n'ai pas pu trouver de solution toute faite, la voici. Espérons que cela aide.

<LocationMatch "^/(?!\.well-known/)">
    RedirectMatch 404 ^(.*/)?\.
</LocationMatch>
1
répondu Antony Gibbs 2018-03-20 16:56:26