2009-01-12 2 views
9

Unsere Site läuft auf Apache und ist mit Client-Zertifikaten abgesichert. Bisher gab es nur ein Zertifikat, das den Zugriff auf die gesamte Site ermöglichte. Jetzt müssen wir jira einer neuen Gruppe von Benutzern zugänglich machen, die nicht auf etwas anderes als jira zugreifen dürfen. Ich habe ein separates Zertifikat für diese Gruppe erstellt und plane, sie mithilfe der Kombination SSLRequire und Location/LocationMatch zu unterscheiden.Verwendung der Negation in der LocationMatch-Direktive

So die Kriterien sind:

  1. Benutzer mit altem Zertifikat kann Zugang Baustellenvorbereitungs-
  2. Benutzer mit neuem Zertifikat kann nur Zugang/jira URL-Muster

ich wenige Kombination versucht, aber nicht Lage, die Negation für LocationMatch Arbeit zu bekommen. Jede Hilfe wäre willkommen.

Die Datei httpd.conf, sieht wie folgt aus:

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> 

Antwort

1

Es war eine Frage der Regex richtig hinzubekommen. Die LocationMatch-Direktive mit dem folgenden regulären Ausdruck funktionierte einwandfrei.

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

Negative Regexes nicht in Apache unterstützt 2.2

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

Ich weiß nicht, ob es in der letzten Apache-Version behoben wurde.

Als Abhilfe kann verwendet werden:

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

oder

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

/[^ s] [^ t ] [^ a] [^ t] [^ i] [^ c]/passt nur Orte an, die 6 Zeichen lang sind. –

3

versuchen Sie diesen: (Dank Milos für die Spitze)

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>