apache2 - para - Uso de la negación en la directiva LocationMatch
habilitar apache para acceso externo (4)
Era una cuestión de obtener la expresión regular correcta. 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>
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.
Entonces el criterio es:
- Los usuarios con un certificado antiguo pueden acceder al sitio completo
- Los usuarios con un nuevo certificado solo pueden acceder al patrón / jira URL
Intenté algunas combinaciones pero no pude obtener la negación para el trabajo de LocationMatch. Cualquier ayuda sería apreciada.
El archivo httpd.conf se ve así:
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>
¡Gracias!
Apache2 usa pcre para soportar la sintaxis de RE de perl5 y esto es posible mediante el uso de una mirada negativa como se describe en http://perldoc.perl.org/perlre.html#Extended-Patterns .
prueba este: (gracias a Milos por el consejo)
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>
Las expresiones negativas negativas 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 alternativa, use:
<LocationMatch "/[^s][^t][^a][^t][^i][^c]">
</LocationMatch>
o
<LocationMatch "^/(?!static)">
</LocationMatch>