我们的网站在apache上运行,并使用客户端证书进行保护。到目前为止,只有一个证书可以访问整个站点。现在,我们要求将jira公开给一组新用户,这些用户除了jira之外不应该访问任何其他内容。我为该组创建了一个单独的证书,并计划通过使用SSLRequire和Location / LocationMatch组合来区分它们。
所以标准是:
我尝试了几个组合,但无法得到LocationMatch工作的否定。任何帮助将不胜感激。
httpd.conf文件,如下所示:
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>
答案 0 :(得分:13)
apache 2.2不支持负正则表达式
请参阅https://issues.apache.org/bugzilla/show_bug.cgi?id=10932
我不知道它是否已在最后一个apache版本中修复。
作为解决方法,请使用:
<LocationMatch "/[^s][^t][^a][^t][^i][^c]">
</LocationMatch>
或
<LocationMatch "^/(?!static)">
</LocationMatch>
答案 1 :(得分:3)
试试这个:(感谢米洛斯的提示)
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>
答案 2 :(得分:2)
Apache2使用pcre支持perl5 RE语法,这可以使用http://perldoc.perl.org/perlre.html#Extended-Patterns中描述的负面预测。
答案 3 :(得分:2)
这可能是一个方便的,使隐藏所有隐藏的文件/目录(保护.git,.htaccess等...)仍然允许访问/.well-known/ 可以安装在任何apache 2.4 virtualhost中或直接安装在apache2.conf中
因为我需要这个并且无法找到现成的解决方案,所以就在这里。 希望它有所帮助。
<LocationMatch "^/(?!\.well-known/)">
RedirectMatch 404 ^(.*/)?\.
</LocationMatch>
答案 4 :(得分:1)
这是让正则表达式正确的问题。带有以下正则表达式的LocationMatch指令工作正常。
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>