2009-01-12 19 views
9

Nuestro sitio se ejecuta en apache y está protegido mediante certificados de cliente. Hasta ahora, solo había un certificado que proporcionaría acceso a todo el sitio. Ahora, tenemos el requisito de exponer a jira a un nuevo grupo de usuarios que no deberían poder acceder a nada más que jira. Creé un certificado separado para ese grupo y planeé distinguirlos usando la combinación SSLRequire y Location/LocationMatch.Uso de la negación en la directiva LocationMatch

lo tanto, el criterio es:

  1. Los usuarios con certificado anterior puede acceso al sitio completo
  2. Los usuarios con nuevo certificado sólo se puede acceder/jira patrón de URL

Probé unos pocos combinación, pero no capaz de obtener la negación para el trabajo de LocationMatch. Cualquier ayuda sería apreciada.

El archivo httpd.conf, se parece a esto:

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> 

Respuesta

1

que era una cuestión de conseguir el derecho de expresión regular. La directiva LocationMatch con la siguiente expresión regular funcionó bien.

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

expresiones regulares negativos no son compatibles con Apache 2.2

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

No sé si se ha solucionado en la última versión de Apache.

Como solución, usar:

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

o

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

/[^ s] [^ t ] [^ a] [^ t] [^ i] [^ c]/solo coincidirá con ubicaciones de 6 caracteres de longitud. –

3

prueba este: (gracias Milos por la punta)

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