Mapping the SSL X509Certificate{FOOTNOTE DEF } to a Principal
The principal passed to the security layer for authentication when CLIENT-CERT authentication is enabled is a function of the client cert. To control what name is extracted from the cert you can specify a CertificatePrincipal:
package org.jboss.security.auth.certs; /** An interface for converting an X509 cert to a Principal * */ public interface CertificatePrincipal { /** * Return the Principal associated with the specified chain of X509 * client certificates. If there is none, return <code>null</code>. * * @param certs Array of client certificates, with the first one in * the array being the certificate of the client itself. */ public Principal toPrinicipal(X509Certificate[] certs); }
Implementations bundled with jboss include:
org.jboss.security.auth.certs.SerialNumberIssuerDNMapping - implementation that builds the principal name based on the cert serialNumber and issuerDN
org.jboss.security.auth.certs.SubjectCNMapping - implementation that uses the client cert SubjectDN CN='...' element as the principal.
org.jboss.security.auth.certs.SubjectDNMapping - implementation that uses the client cert SubjectDN as the principal.
org.jboss.security.auth.certs.SubjectX500Principal (4.0.4+) - implementation that uses the client cert SubjectX500Principal as the principal.
The CertificatePrincipal is configured on the JBossWeb container by editing the jbossweb-tomcat.sar/server.xml and setting the certificatePrincipal attribute on the configured Realm:
<!-- The JAAS based authentication and authorization realm implementation that is compatible with the jboss 3.2.x realm implementation. - certificatePrincipal : the class name of the org.jboss.security.auth.certs.CertificatePrincipal impl used for mapping X509[] cert chains to a Princpal. --> <Realm className="org.jboss.web.tomcat.security.JBossSecurityMgrRealm" certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping" ></Realm> <!-- A subclass of JBossSecurityMgrRealm that uses the authentication behavior of JBossSecurityMgrRealm, but overrides the authorization checks to use JACC permissions with the current java.security.Policy to determine authorized access. <Realm className="org.jboss.web.tomcat.security.JaccAuthorizationRealm" certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping" ></Realm> -->
Comments