14

我们的站点在 apache 上运行,并使用客户端证书进行保护。到目前为止,只有一个证书可以提供对整个站点的访问权限。现在,我们需要将 jira 公开给一组新用户,这些用户除了 jira 之外不能访问任何其他内容。我为该组创建了一个单独的证书,并计划使用 SSLRequire 和 Location/LocationMatch 组合来区分它们。

所以标准是:

  1. 旧证书的用户可以访问完整的站点
  2. 拥有新证书的用户只能访问 /jira URL 模式

我尝试了几种组合,但无法否定 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>
4

5 回答 5

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>
于 2010-08-24T18:53:29.007 回答
4

试试这个:(感谢米洛斯的提示)

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>
于 2011-11-15T01:23:08.997 回答
4

这可能很方便,使所有隐藏的文件/目录不可见(保护 .git、.htaccess 等...)并且仍然允许访问 /.well-known/ 可以安装在任何 apache 2.4 虚拟主机中或直接安装在 apache2.conf

因为我需要这个并且找不到现成的解决方案,所以就在这里。希望能帮助到你。

<LocationMatch "^/(?!\.well-known/)">
    RedirectMatch 404 ^(.*/)?\.
</LocationMatch>
于 2018-03-20T16:56:26.947 回答
2

Apache2 使用支持 perl5 RE 语法的 pcre,这可以使用http://perldoc.perl.org/perlre.html#Extended-Patterns中描述的负前瞻。

于 2009-10-27T02:37:43.697 回答
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>
于 2009-01-12T20:10:16.163 回答