Tho*_*ger 4 mod-ssl mod-auth apache-2.4
出于安全原因,应将 Web 应用程序的身份验证迁移到 SSL 客户端证书。应该可以使用用户名/密码或 SSL 登录。此外,应允许来自内网的用户无需额外身份验证即可使用该应用程序。
我们尝试根据官方文档实现这个场景,但是没有成功。
这是我们当前的配置
<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>
Run Code Online (Sandbox Code Playgroud)
使用此配置,甚至不需要客户端证书。如果我们删除基本身份验证配置,则 SSL 客户端身份验证运行良好。
这个问题已经三个月了,所以 OP 可能不需要我的回答,但它可能会帮助任何想要这种配置的人。
这个问题被标记为 apache-2.4,但配置看起来像一个适合 2.2 的配置。这并不完全令人惊讶,因为 Apache 2.4 文档中的许多示例本身似乎都不适合 2.4。
我有这样的配置在 2.2 中工作(除了不起作用的“允许来自”)并且不得不为 2.4 重写它。我发现它需要一些在文档中没有立即显现的元素。
我对此不提供任何保证;它基于我的配置文件,没有经过测试。+StrictRequire可能不需要SSLOptions- 我没有尝试过没有它,但它确实以这种方式工作。
就此而言,SSLOptions可能根本不需要该行 -+FakeBasicAuth可能没有使用该选项。在我这里的配置中,只要Company_O在证书中找到,就会授予访问权限。据我所知,+FakeBasicAuth与Require valid-user(单独)一起使用,如果在 中定义的用户列表中找到证书中的 DNAuthUserFile以及适当的密码,则授予访问权限。我的系统不能那样工作,我怀疑 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
# Correction: eq is integer comparison, string comparison requires ==
# Require expr %{SSL_CLIENT_I_DN_O} eq "Company_O"
Require expr %{SSL_CLIENT_I_DN_O} == "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>
Run Code Online (Sandbox Code Playgroud)
我有
<Directory />
...
Require all denied
...
</Directory>
Run Code Online (Sandbox Code Playgroud)
在不同的配置文件中 - 这可能是配方的重要部分。
我花了一段时间才开始工作的是,这个Require expr %{SSL_CLIENT位似乎可以独立工作,但最终我意识到这Require ssl-verify-client也是必需的(参见http://httpd.apache.org/docs/2.4/mod/mod_ssl.html #authzproviders )
| 归档时间: |
|
| 查看次数: |
6956 次 |
| 最近记录: |