在我的环境中,外部实体提供根CA和中间CA. 他们发行数千个带有PKI证书的智能卡进行身份validation。 它们在扩展密钥用法中提供了客户端authentication(OID 1.3.6.1.5.5.7.3.2),使用替代名称字段。 这包含用户的唯一ID号码,例如[email protected],其目的是作为用户的Active Directory userPrincipalName(UPN)。
这些智能卡可以发行30天或3年,利用UPN进行身份validation,用户可以在智能卡过期/中断时保持访问,并获得新的智能卡,将其证书关联到Active Directory中。
上述authenticationscheme在Windows工作站,服务器,Linux服务器上工作,并且是不可变的(不受控制)。
现在,我们正在尝试使用SSL / TLS客户端身份validation来设置HTTPD以使用其PKI证书对这些用户进行身份validation。 在对用户进行身份validation的基本级别,如果他们具有由中间体签名的PKI令牌,并且不会被CRL或OCSP工作撤销。
我们所要做的就是将他们的PKI会话与他们的活动目录帐户相关联,因此我们可以根据Active Directory安全组成员进行授权。
我们可以提取UPN,但似乎没有办法将mod_ssl客户端身份validation桥接到mod_authnz_ldap授权scheme中。
以下是我们对httpdconfiguration概念的certificate。
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>
所以,在本质上,我们不知道如何将SSL_CLIENT_SAN_OTHER_msUPN_0环境variables映射到mod_authnz_ldap的用户名,所以mod_authnz_ldap使用它来进行授权检查。