#apache
#apache
Вопрос:
Я пытаюсь настроить Apache для аутентификации HTTP-запросов с помощью сертификатов kerberos или клиентских сертификатов.
Следующая конфигурация способна проверять подлинность запросов с помощью любого из вышеперечисленных. Однако он выполняет поиск LDAP для обоих. Я хотел бы требовать поиска LDAP только при аутентификации через kerberos. Для проверки подлинности сертификата клиента я хотел бы выполнить некоторую фильтрацию на основе другого свойства в сертификате, а затем использовать значение CN в Authorize-Samaccountname
заголовке. Я могу получить CN в заголовке с помощью SSL_CLIENT_S_DN_CN
, поэтому должен иметь возможность указать ему использовать тот, который присутствует.
<VirtualHost *:443>
ServerName subdomain.example.com
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
AllowOverride None
Require all granted
</Directory>
<Location "/">
<LimitExcept OPTIONS>
Require ldap-filter objectclass=user
</LimitExcept>
AuthType Kerberos
AuthName "Kerberos Login"
SSLVerifyClient optional
SSLVerifyDepth 10
SSLUserName SSL_CLIENT_S_DN_CN
SSLRequireSSL
AuthLDAPURL "ldaps://example.com/dc=EXAMPLE,dc=COM?sAMAccountName"
AuthLDAPBindDN svc-ldap
AuthLDAPBindPassword yupyupyup
ProxyPass http://localhost:8080/ timeout=600
ProxyPassReverse http://localhost:8080/
</Location>
## Request header rules
RequestHeader set Authorize-Samaccountname %{AUTHORIZE_SAMACCOUNTNAME}e
## Kerberos directives
KrbMethodNegotiate on
KrbMethodK5Passwd on
KrbAuthoritative on
Krb5Keytab /usr/local/etc/svc-t-kerberos.keytab
KrbLocalUserMapping on
KrbVerifyKDC on
KrbServiceName HTTP/svc-t-kerberos
KrbSaveCredentials off
## SSL directives
SSLEngine on
SSLCertificateFile "/etc/pki/CA/certs/host.example.com.cer"
SSLCertificateKeyFile "/etc/pki/CA/certs/host.example.com.key"
SSLCertificateChainFile "/etc/pki/CA/certs/intermediate.cer"
SSLCACertificatePath "/etc/pki/tls/certs"
SSLCACertificateFile "/etc/pki/tls/certs/ca-bundle.crt"
</VirtualHost>
Как мне обойти поиск LDAP, но вместо этого проверить значение поля сертификата при использовании клиентских сертификатов?
Ответ №1:
Похоже, что если вы укажете несколько Require
операторов, может потребоваться любой из них (в зависимости от того, завершается проверка с ошибкой или является нейтральной). В моем случае я могу использовать следующее:
Require ldap-filter objectclass=user
Require ssl-verify-client
Это по-прежнему выполняет поиск LDAP, но, учитывая, что требование SSL проходит, оно все равно позволит пользователю пройти.
Вы можете увидеть mod_authz_core для того, как вы можете использовать RequireAny
, и RequireAll
для более сложных требований, хотя они не могут быть объединены с. LimitExcept
Я предполагаю, что вы могли бы использовать Require method OPTIONS
вместо этого, но не исследовали дальше, поскольку вышеупомянутое соответствует моим потребностям.