2009-01-12 3 views
9

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 donnant accès à l'ensemble du site. Maintenant, nous avons besoin d'exposer jira à un nouveau groupe d'utilisateurs qui ne devraient pouvoir accéder à rien d'autre qu'à jira. J'ai créé un certificat séparé pour ce groupe et je prévois de les distinguer en utilisant la combinaison SSLRequire et Location/LocationMatch.Utilisation de la négation dans la directive LocationMatch

Ainsi, le critère est:

  1. utilisateurs avec ancien certificat peut accès au site complet
  2. utilisateurs avec le nouveau certificat ne peut accéder/JIRA modèle d'URL

J'ai essayé quelques combinaison mais pas capable d'obtenir la négation pour le travail LocationMatch. Toute aide serait appréciée.

Le fichier httpd.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> 

Répondre

1

Il était une question d'obtenir le droit regex. La directive LocationMatch avec l'expression régulière 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> 
13

regexes négatives ne sont pas pris en charge dans apache 2.2

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

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

Pour contourner ce problème, utilisez:

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

ou

<LocationMatch "^/(?!static)"> 
</LocationMatch> 
+2

/[^ s] [^ t ] [^ a] [^ t] [^ i] [^ c]/ne correspond qu'aux emplacements de 6 caractères. –

3

essayer celui-ci: (merci Milos pour la pointe)

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