В моей среде внешний объект предоставляет корневой ЦС и промежуточный ЦС. Они выпускают тысячи смарт-карт с сертификатами 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 использует ее для проверки авторизации.