No meu ambiente, uma entidade externa fornece uma CA raiz & CA (s) intermediária (s). Eles emitem milhares de cartões inteligentes com certificados PKI para autenticação. Eles fornecem a autenticação de cliente (OID 1.3.6.1.5.5.7.3.2) dentro do uso de chave estendida, campos de nome alternativo de assunto. Contém o número de identificação exclusivo do usuário, ou seja, [email protected], que se destina a ser o UserPrincipalName (UPN) do Active Directory do usuário.
Esses cartões inteligentes podem ser emitidos por até 30 dias, ou até 3 anos, e o uso do UPN para autenticação permite que os usuários mantenham o acesso quando o cartão inteligente expira / quebre e receba um novo, sem ter para associar novamente seus certificados no Active Directory.
O esquema de autenticação acima funciona a partir de estações de trabalho, servidores, servidores linux do Windows e é imutável (fora do controle).
Agora, estamos tentando configurar o HTTPD para autenticar esses usuários com seus certificados PKI usando a autenticação de cliente SSL / TLS. No nível básico de autenticação de usuários, se eles tiverem um token de PKI assinado pelos intermediários e não for revogado pelo trabalho de CRL ou OCSP.
O que estamos tentando fazer é associar sua sessão PKI à sua conta de diretório ativo, para que possamos fazer uma autorização com base na participação no grupo de segurança do Active Directory.
Nós podemos extrair o UPN, mas parece que não há como conectar a autenticação do cliente mod_ssl ao esquema de autorização mod_authnz_ldap.
Abaixo está nossa prova de configuração do conceito 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 "[email protected]"
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>
Assim, no essense não podemos descobrir como mapear a variável de ambiente SSL_CLIENT_SAN_OTHER_msUPN_0 para o nome de usuário do mod_authnz_ldap, então mod_authnz_ldap a usa para a verificação de autorização.