Назад | Перейти на главную страницу

Аутентификация PKI в HTTPD с использованием Active Directory (LDAP)

В моей среде внешний объект предоставляет корневой ЦС и промежуточный ЦС. Они выпускают тысячи смарт-карт с сертификатами PKI для аутентификации. Они обеспечивают аутентификацию клиента (OID 1.3.6.1.5.5.7.3.2) внутри расширенного использования ключа, полей альтернативного имени субъекта. Он содержит уникальный идентификационный номер пользователя, то есть 12345@example.com, который предназначен для использования в Active Directory userPrincipalName (UPN) пользователя.

Эти смарт-карты могут быть выпущены на срок от 30 дней или до 3 лет, а использование UPN для аутентификации позволяет пользователям сохранять доступ, когда срок действия их смарт-карты истекает / ломается и они получают новую, без необходимости повторного использования. свяжите свои сертификаты в Active Directory.

Вышеупомянутая схема аутентификации работает с рабочих станций Windows, серверов, серверов Linux и является неизменной (вне контроля).

Теперь мы пытаемся настроить HTTPD для аутентификации этих пользователей с помощью их сертификатов PKI с использованием аутентификации клиента SSL / TLS. На базовом уровне аутентификации пользователей, если у них есть токен PKI, подписанный промежуточными звеньями и не отозванный CRL или OCSP.

Что мы пытаемся сделать, так это связать их сеанс PKI с их учетной записью активного каталога, чтобы мы могли выполнять авторизацию на основе членства в группе безопасности Active Directory.

Мы можем извлечь UPN, но, похоже, нет способа связать аутентификацию клиента mod_ssl со схемой авторизации mod_authnz_ldap.

Ниже приведено наше доказательство концепции конфигурации httpd.

Listen 443 https
<VirtualHost _default_:443>
    SSLEngine on
    .... standard SSL options ....
    <Location /secure-pki>
        SSLVerifyClient require
        SSLVerifyDepth 2

        # How do we map the SSL_CLIENT_SAN_OTHER_msUPN_0 environment variable so mod_authnz_ldap uses it?

        AuthLDAPBindDN "httpd@example.com"
        AuthLDAPBindPassword "apassword"
        AuthLDAPURL "ldaps://ldap1.example.com ldap2.example.com:3269/dc=example,dc=com?userPrincipalName?sub?(objectClass=user)"
        Require ldap-group cn=Managers,ou=Groups,dc=example,dc=com
    </Location>
</VirtualHost>

Итак, по сути, мы не можем понять, как сопоставить переменную среды SSL_CLIENT_SAN_OTHER_msUPN_0 с именем пользователя mod_authnz_ldap, поэтому mod_authnz_ldap использует ее для проверки авторизации.