使用客户端SSL证书或基本身份validation进行身份validation

出于安全原因,Web应用程序的身份validation应该迁移到SSL客户端证书。 应该可以使用用户名/密码或SSLlogin。 此外,来自内联网的用户应该被允许使用该应用程序,而不需要额外的authentication。

我们试图根据官方文件来实施这种情况,但没有成功。

这是我们目前的configuration

<Directory /opt/app/system/html> RedirectMatch permanent ^/$ /exec/login.pl Options -Indexes +FollowSymLinks SSLVerifyClient optional SSLVerifyDepth 2 SSLRequire %{SSL_CLIENT_I_DN_O} eq "Company_O" SSLOptions +FakeBasicAuth Satisfy any AuthType Basic AuthName "Zugriffsschutz" AuthBasicProvider file AuthUserFile /etc/apache2/htaccess/iapp.passwd require valid-user Order allow,deny Allow from 10.20.0.0/255.255.0.0 Allow from 10.144.100 </Directory> 

通过这种configuration,甚至不需要客户端证书。 如果我们删除基本的身份validationconfiguration,SSL客户端身份validation运作良好。

问题是三个月大,所以我的答案可能不需要的OP,但它可以帮助任何人想要这种configuration。

这个问题被标记为apache-2.4,但configuration看起来像是一个适合2.2的configuration。 这并不令人惊讶,因为Apache 2.4文档中的许多示例似乎并不适合2.4。

我有一个这样的configuration工作在2.2(除了“允许从”不工作),并不得不重写为2.4。 我发现它需要一些在文档中不太明显的元素。

我不提供任何担保; 它基于我的configuration文件,没有testing。 +StrictRequire可能不需要在SSLOptions – 我没有尝试没有它,但它确实这样工作。

对于这个问题, SSLOptions行可能根本不需要 – +FakeBasicAuth选项可能没有被使用。 在我这里的configuration中,只要在证书中findCompany_O ,访问就会被授予。 据我所知,如果在AuthUserFile中定义的用户列表中find来自证书的DN以及合适的密码,则+FakeBasicAuthRequire valid-user (单独)一起使用,并且授予访问权限。 我的系统不能这样工作,我怀疑OP也不想这样做。

 <Directory /opt/app/system/html> RedirectMatch permanent ^/$ /exec/login.pl Options -Indexes +FollowSymLinks # Anything which matches a Require rule will let us in # Make server ask for client certificate, but not insist on it SSLVerifyClient optional SSLVerifyDepth 2 SSLOptions +FakeBasicAuth +StrictRequire # Client with appropriate client certificate is OK <RequireAll> Require ssl-verify-client Require expr %{SSL_CLIENT_I_DN_O} eq "Company_O" </RequireAll> # Set up basic (username/password) authentication AuthType Basic AuthName "Zugriffsschutz" AuthBasicProvider file AuthUserFile /etc/apache2/htaccess/iapp.passwd # User which is acceptable to basic authentication is OK Require valid-user # Access from these addresses is OK Require ip 10.20.0.0/255.255.0.0 Require ip 10.144.100 </Directory> 

我有

 <Directory /> ... Require all denied ... </Directory> 

在另一个configuration文件中 – 这可能是这是配方的重要组成部分。

我花了一段时间才得到这个工作,似乎Require expr %{SSL_CLIENT位会自行工作,但最终我意识到Require ssl-verify-client也是必需的(请参阅http://httpd.apache。 org / docs / 2.4 / mod / mod_ssl.html#authzproviders )