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:
- les utilisateurs avec un ancien certificat peuvent accès au site complet
- 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>
5 réponses
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>
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>
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.
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>
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>