MessageType - type of message contained in the message context being evaluatedpublic abstract class BaseClientCertAuthSecurityHandler<MessageType> extends BaseTrustEngineSecurityHandler<X509Credential,MessageType>
This rule is only evaluated if the supplied HttpServletRequest contains a peer X509Credential
as returned via ServletRequestX509CredentialAdapter.
The entity ID used to perform trust evaluation of the X509 credential is first retrieved via
getCertificatePresenterEntityID(MessageContext). If this value is non-null, then trust evaluation
proceeds on that basis. If trust evaluation using this entity ID is successful, the message context's
authentication state will be set to true via setAuthenticatedState(MessageContext, boolean)
and processing is terminated. If unsuccessful, a MessageHandlerException is thrown.
If no value was available from getCertificatePresenterEntityID(MessageContext), then rule evaluation
will be attempted as described in evaluateCertificateNameDerivedPresenters(X509Credential, MessageContext),
based on the currently configured certificate name evaluation options. If this method returns a non-null certificate
presenter entity ID, it will be set on the message context by calling
setAuthenticatedCertificatePresenterEntityID(MessageContext, String). The message context's
authentication state will be set to true via setAuthenticatedState(MessageContext, boolean).
Rule processing is then terminated. If the method returns null, the client certificate presenter entity ID
and message context authentication state will remain unmodified and rule processing continues.
Finally rule evaluation will proceed as described in
evaluateDerivedPresenters(X509Credential, MessageContext). This is primarily an extension point by which
subclasses may implement specific custom logic. If this method returns a non-null client certificate presenter entity
ID, it will be set via setAuthenticatedCertificatePresenterEntityID(MessageContext, String), the message
context's authentication state will be set to true via
setAuthenticatedState(MessageContext, boolean) and rule processing is terminated.
If the method returns null, the client certificate presenter entity ID and transport authentication state will remain
unmodified.
| Modifier and Type | Field and Description |
|---|---|
private CertificateNameOptions |
certNameOptions
Options for deriving client cert presenter entity ID's from an X.509 certificate.
|
private HttpServletRequest |
httpServletRequest
The HttpServletRequest being processed.
|
private Logger |
log
Logger.
|
| Constructor and Description |
|---|
BaseClientCertAuthSecurityHandler() |
| Modifier and Type | Method and Description |
|---|---|
protected net.shibboleth.utilities.java.support.resolver.CriteriaSet |
buildCriteriaSet(String entityID,
MessageContext<MessageType> messageContext)
Subclasses are required to implement this method to build a criteria set for the trust engine
according to trust engine and application-specific needs.
|
protected void |
doEvaluate(X509Credential requestCredential,
MessageContext<MessageType> messageContext)
Evaluate the request credential.
|
protected void |
doInitialize() |
protected void |
doInvoke(MessageContext<MessageType> messageContext) |
protected String |
evaluateCertificateNameDerivedPresenters(X509Credential requestCredential,
MessageContext<MessageType> messageContext)
Evaluate candidate presenter entity ID's which may be derived from the request credential's entity certificate
according to the options supplied via
CertificateNameOptions. |
protected String |
evaluateDerivedPresenters(X509Credential requestCredential,
MessageContext<MessageType> messageContext)
Evaluate any candidate presenter entity ID's which may be derived from the credential or other message context
information.
|
protected String |
evaluateSubjectAltNames(X509Credential requestCredential,
MessageContext<MessageType> messageContext)
Evaluate the presenter entity ID as derived from the cert subject alternative names specified by types enumerated
in
CertificateNameOptions.getSubjectAltNames(). |
protected String |
evaluateSubjectCommonName(X509Credential requestCredential,
MessageContext<MessageType> messageContext)
Evaluate the presenter entity ID as derived from the cert subject common name (CN).
|
protected String |
evaluateSubjectDN(X509Credential requestCredential,
MessageContext<MessageType> messageContext)
Evaluate the presenter entity ID as derived from the cert subject DN.
|
protected List<String> |
getAltNames(X509Certificate cert,
Integer altNameType)
Get the list of subject alt name values from the certificate which are of the specified alt name type.
|
CertificateNameOptions |
getCertificateNameOptions()
Get the certificate name options in use.
|
protected abstract String |
getCertificatePresenterEntityID(MessageContext<MessageType> messageContext)
Get the entity ID of the presenter of the client TLS certificate, as will be used for trust evaluation purposes.
|
protected String |
getCommonName(X509Certificate cert)
Get the first common name (CN) value from the subject DN of the specified certificate.
|
HttpServletRequest |
getHttpServletRequest()
Get the HTTP servlet request being processed.
|
protected String |
getSubjectName(X509Certificate cert)
Get subject name from a certificate, using the currently configured X500DNHandler and subject DN output format.
|
protected abstract void |
setAuthenticatedCertificatePresenterEntityID(MessageContext<MessageType> messageContext,
String entityID)
Store the successfully authenticated derived entity ID of the certificate presenter in the message context.
|
protected abstract void |
setAuthenticatedState(MessageContext<MessageType> messageContext,
boolean authenticated)
Store the indicated message authentication state in the message context.
|
void |
setCertificateNameOptions(CertificateNameOptions options)
Set the certificate name options in use.
|
void |
setHttpServletRequest(HttpServletRequest request)
Set the HTTP servlet request being processed.
|
evaluate, evaluate, getTrustEngine, setTrustEnginedoPostInvoke, doPostInvoke, doPreInvoke, getLogPrefix, invokedestroy, doDestroy, initialize, isDestroyed, isInitializedprivate final Logger log
private CertificateNameOptions certNameOptions
private HttpServletRequest httpServletRequest
public HttpServletRequest getHttpServletRequest()
public void setHttpServletRequest(HttpServletRequest request)
request - The to set.public CertificateNameOptions getCertificateNameOptions()
public void setCertificateNameOptions(CertificateNameOptions options)
options - The certNameOptions to set.protected void doInitialize()
throws net.shibboleth.utilities.java.support.component.ComponentInitializationException
doInitialize in class BaseTrustEngineSecurityHandler<X509Credential,MessageType>net.shibboleth.utilities.java.support.component.ComponentInitializationExceptionprotected void doInvoke(MessageContext<MessageType> messageContext) throws MessageHandlerException
doInvoke in class AbstractMessageHandler<MessageType>MessageHandlerExceptionprotected void doEvaluate(X509Credential requestCredential, MessageContext<MessageType> messageContext) throws MessageHandlerException
requestCredential - the X509Credential derived from the requestmessageContext - the message context being evaluatedMessageHandlerException - thrown if a certificate presenter entity ID available from the message context
and the client certificate token can not be establishd as trusted on that basis, or if there is error
during evaluation processingprotected abstract String getCertificatePresenterEntityID(MessageContext<MessageType> messageContext)
This tends to be performed in a protcol-specific manner, so it is therefore abstract and must be implemented in a concrete subclass.
messageContext - the current message contextprotected abstract void setAuthenticatedCertificatePresenterEntityID(MessageContext<MessageType> messageContext, String entityID)
This tends to be performed in a protocol-specific manner, so it is therefore abstract and must be implemented in a concrete subclass.
messageContext - the current message contextentityID - the successfully authenticated derived entity ID of the client TLS certificate presenterprotected abstract void setAuthenticatedState(MessageContext<MessageType> messageContext, boolean authenticated)
This tends to be performed in a protocol-specific manner, so it is therefore abstract and must be implemented in a concrete subclass.
messageContext - the current message contextauthenticated - flag indicating what authentication state to storeprotected net.shibboleth.utilities.java.support.resolver.CriteriaSet buildCriteriaSet(String entityID, MessageContext<MessageType> messageContext) throws MessageHandlerException
buildCriteriaSet in class BaseTrustEngineSecurityHandler<X509Credential,MessageType>entityID - the candidate issuer entity ID which is being evaluatedmessageContext - the message context which is being evaluatedMessageHandlerException - thrown if criteria set can not be constructedprotected String evaluateDerivedPresenters(X509Credential requestCredential, MessageContext<MessageType> messageContext) throws MessageHandlerException
This serves primarily as an extension point for subclasses to implement application-specific logic.
If multiple derived candidate entity ID's would satisfy the trust engine criteria, the choice of which one to return as the canonical presenter entity ID value is implementation-specific.
requestCredential - the X509Credential derived from the requestmessageContext - the message context being evaluatedMessageHandlerException - thrown if there is error during processingprotected String evaluateCertificateNameDerivedPresenters(X509Credential requestCredential, MessageContext<MessageType> messageContext) throws MessageHandlerException
CertificateNameOptions.
Configured certificate name types are derived as candidate presenter entity ID's and processed in the following order:
CertificateNameOptions.getX500DNHandler() and using the output format indicated by
CertificateNameOptions.getX500SubjectDNFormat().CertificateNameOptions.getSubjectAltNames().
Note that this is a LinkedHashSet, so the order of evaluation is the order of insertion.
The first one of the above which is successfully evaluated by the trust engine using criteria built from
BaseTrustEngineSecurityHandler.buildCriteriaSet(String, MessageContext) will be returned.
requestCredential - the X509Credential derived from the requestmessageContext - the message context being evaluatedMessageHandlerException - thrown if there is error during processingprotected String evaluateSubjectCommonName(X509Credential requestCredential, MessageContext<MessageType> messageContext) throws MessageHandlerException
requestCredential - the X509Credential derived from the requestmessageContext - the message context being evaluatedMessageHandlerException - thrown if there is error during processingprotected String evaluateSubjectDN(X509Credential requestCredential, MessageContext<MessageType> messageContext) throws MessageHandlerException
requestCredential - the X509Credential derived from the requestmessageContext - the message context being evaluatedMessageHandlerException - thrown if there is error during processingprotected String evaluateSubjectAltNames(X509Credential requestCredential, MessageContext<MessageType> messageContext) throws MessageHandlerException
CertificateNameOptions.getSubjectAltNames().requestCredential - the X509Credential derived from the requestmessageContext - the message context being evaluatedMessageHandlerException - thrown if there is error during processingprotected String getCommonName(X509Certificate cert)
cert - the certificate being processedprotected String getSubjectName(X509Certificate cert)
cert - the certificate being processedprotected List<String> getAltNames(X509Certificate cert, Integer altNameType)
cert - the certificate from which to extract alt namesaltNameType - the type of alt name to extractCopyright © 1999–2014. All rights reserved.