使用 LDAP 授权的 Apache 客户端证书身份验证

标签 apache authentication ldap authorization ssl-certificate

对于 Apache,我尝试使用客户端证书对用户进行身份验证,并使用 LDAP 组授权他们。到目前为止我有这个:

# Apache 2.4.6

LoadModule ssl_module modules/mod_ssl.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

Listen 9999
<VirtualHost *:9999>
    ServerName example
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/certs/server.key
    SSLCACertificateFile /etc/ssl/certs/ca.crt
    SSLVerifyClient require
    SSLVerifyDepth 1
    SSLOptions +FakeBasicAuth

    <Location /test/>
        # SSLUserName SSL_CLIENT_S_DN_CN
        # AuthBasicFake "%{SSL_CLIENT_S_DN_CN}"
        AuthType basic
        AuthName "Cert"
        AuthBasicProvider ldap

        AuthLDAPURL "ldap://localhost/dc=example?uid"
        AuthLDAPBindDN "cn=admin,dc=example"
        AuthLDAPBindPassword "test123"
        AuthLDAPGroupAttribute uniqueMember

        Require ldap-group cn=admin,ou=groups,dc=example
    </Location>
</VirtualHost>

它在大多数情况下都有效,但是用户名以 /C=XX/L=Default City/O=Default Company Ltd/CN=testuser 结尾(即来自 X 的完整 DN .509 主题字段),而我希望它只是 testuser(即只是 CN,SSL_CLIENT_S_DN_CN)。

我尝试使用 AuthBasicFake 指令,这似乎正是我所需要的,但是用户名字段始终为空。有什么建议吗?

最佳答案

我得到它以使用以下配置。只有拥有由 SSLCACertificateFile 中的证书签名的 key 对的用户才能进行身份验证。在我的 LDAP 中,所有用户都属于 cn=user,ou=groups,dc=example 组,默认情况下可以访问整个站点。但是,一些用户也属于 cn=admin,ou=groups,dc=example,这将使他们能够访问 /admin-panel

LoadModule ssl_module modules/mod_ssl.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

Listen 9999
<VirtualHost *:9999>
    ServerName www.example.com
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/certs/server.key
    SSLCACertificateFile /etc/ssl/certs/ca.crt
    SSLVerifyClient require
    SSLVerifyDepth 1
    SSLUserName SSL_CLIENT_S_DN_CN

    <Location />
        AuthType basic
        AuthName "Cert"
        AuthBasicProvider ldap

        AuthLDAPURL "ldap://localhost/dc=example?uid"
        AuthLDAPBindDN "cn=admin,dc=example"
        AuthLDAPBindPassword "test123"
        AuthLDAPGroupAttribute uniqueMember

        Require ldap-group cn=user,ou=groups,dc=example
    </Location>

    <Location "/admin-panel">
        Require ldap-group cn=admin,ou=groups,dc=example
    </Location>
</VirtualHost>

关于使用 LDAP 授权的 Apache 客户端证书身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51792762/

相关文章:

apache - 为什么我的子域重定向到我的主域?

apache - 带有子域和 url 模式的 mod_rewrite

apache - htaccess 重写规则,不带 R 标志创建外部重定向

java - 密码验证无法解析为类型错误

active-directory - 带通配符的 ldap 查询

java - 将身份服务器 5.1.0 配置为 LDAP 服务器并测试连接的最佳方法

django - Django 1.7 在 mod-wsgi 上的代码更改监控出现故障

python - 哪种解决方案更适合Django社交身份验证?

java - Firebase 登录 - 加载卡住

Python LDAP 搜索