
org.italiangrid.voms.util.CertificateValidatorBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of voms-api-java Show documentation
Show all versions of voms-api-java Show documentation
Java APIs to validate and request VOMS attribute certificates
/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2014.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.italiangrid.voms.util;
import java.util.Arrays;
import org.italiangrid.voms.ac.impl.DefaultVOMSValidator;
import eu.emi.security.authn.x509.CrlCheckingMode;
import eu.emi.security.authn.x509.NamespaceCheckingMode;
import eu.emi.security.authn.x509.OCSPCheckingMode;
import eu.emi.security.authn.x509.OCSPParametes;
import eu.emi.security.authn.x509.ProxySupport;
import eu.emi.security.authn.x509.StoreUpdateListener;
import eu.emi.security.authn.x509.ValidationErrorListener;
import eu.emi.security.authn.x509.X509CertChainValidatorExt;
import eu.emi.security.authn.x509.impl.CRLParameters;
import eu.emi.security.authn.x509.impl.OpensslCertChainValidator;
import eu.emi.security.authn.x509.impl.RevocationParametersExt;
import eu.emi.security.authn.x509.impl.ValidatorParamsExt;
/**
* A utility class which provides convenient methods to build a certificate
* validator with defaults that are meaningful for VOMS usage.
*
* @author cecco
*
*/
public class CertificateValidatorBuilder {
/**
* This enum determine which hash function is configured for the canl
* {@link OpensslCertChainValidator} to resolve CRLs and other trust anchors
* files.
*/
public static enum OpensslHashFunction {
MD5,
SHA1
};
/**
* The default Openssl hash function value. MD5 is chosen to ensure
* compatibility with Openssl pre 1.0 deployments.
*/
public static final OpensslHashFunction DEFAULT_OPENSSL_HASH_FUNCTION = OpensslHashFunction.MD5;
/**
* The default CRL checking policy.
*/
public static final CrlCheckingMode DEFAULT_CRL_CHECKS = CrlCheckingMode.IF_VALID;
/**
* The default OCSP checking policy.
*/
public static final OCSPCheckingMode DEFAULT_OCSP_CHECKS = OCSPCheckingMode.IGNORE;
/**
* The default namespace checking policy.
*/
public static final NamespaceCheckingMode DEFAULT_NS_CHECKS = NamespaceCheckingMode.GLOBUS_EUGRIDPMA;
/**
* The default trust anchors directory.
*/
public static final String DEFAULT_TRUST_ANCHORS_DIR = "/etc/grid-security/certificates";
/**
* By default this builder builds non-lazy validators
*/
public static final Boolean DEFAULT_VALIDATOR_IS_LAZY = Boolean.FALSE;
/**
* Default validator trust anchor update interval.
*/
public static final long DEFAULT_TRUST_ANCHORS_UPDATE_INTERVAL = 0L;
private String trustAnchorsDir = DEFAULT_TRUST_ANCHORS_DIR;
private ValidationErrorListener validationErrorListener = null;
private StoreUpdateListener storeUpdateListener = null;
private long trustAnchorsUpdateInterval = DEFAULT_TRUST_ANCHORS_UPDATE_INTERVAL;
private boolean lazyAnchorsLoading = DEFAULT_VALIDATOR_IS_LAZY;
private NamespaceCheckingMode namespaceChecks = DEFAULT_NS_CHECKS;
private CrlCheckingMode crlChecks = DEFAULT_CRL_CHECKS;
private OCSPCheckingMode ocspChecks = DEFAULT_OCSP_CHECKS;
private OpensslHashFunction opensslHashFunction = DEFAULT_OPENSSL_HASH_FUNCTION;
public CertificateValidatorBuilder() {
}
/**
* Sets the openssl hash function for this builder
*
* @param f
* the {@link OpensslHashFunction}
*
* @return the builder object
*/
public CertificateValidatorBuilder opensslHashFunction(
OpensslHashFunction f) {
opensslHashFunction = f;
return this;
}
/**
* Sets the store update listener for this builder
*
* @param l
* the {@link StoreUpdateListener}
* @return the builder object
*/
public CertificateValidatorBuilder storeUpdateListener(
StoreUpdateListener l) {
storeUpdateListener = l;
return this;
}
/**
* Sets the trust anchors dir for this builder
*
* @param dir
* the trust anchors directory
* @return the builder object
*/
public CertificateValidatorBuilder trustAnchorsDir(String dir) {
trustAnchorsDir = dir;
return this;
}
/**
* Sets the validation error listener for this builder
*
* @param l
* the {@link ValidationErrorListener}
* @return the builder object
*/
public CertificateValidatorBuilder validationErrorListener(
ValidationErrorListener l) {
validationErrorListener = l;
return this;
}
/**
* Sets the trust anchors update interval for this builder
*
* @param interval
* the update interval
* @return the builder object
*/
public CertificateValidatorBuilder trustAnchorsUpdateInterval(long interval) {
trustAnchorsUpdateInterval = interval;
return this;
}
/**
* Sets whether the created validator will be lazy in loading anchors
*
* @param lazyness
* the boolean flag that determines if the validator will be lazy in
* loading trust anchors
*
* @return the builder object
*/
public CertificateValidatorBuilder lazyAnchorsLoading(boolean lazyness) {
lazyAnchorsLoading = lazyness;
return this;
}
/**
* Sets the namespace checking mode for this builder
*
* @param nsChecks
* the {@link NamespaceCheckingMode}
* @return the builder object
*/
public CertificateValidatorBuilder namespaceChecks(
NamespaceCheckingMode nsChecks) {
namespaceChecks = nsChecks;
return this;
}
/**
* Sets the crl checking mode for this builder
*
* @param crl
* the {@link CrlCheckingMode}
* @return the builder object
*/
public CertificateValidatorBuilder crlChecks(CrlCheckingMode crl) {
crlChecks = crl;
return this;
}
/**
* Sets the ocsp checking mode for this builder
*
* @param ocsp
* the {@link OCSPCheckingMode}
* @return the builder object
*/
public CertificateValidatorBuilder ocspChecks(OCSPCheckingMode ocsp) {
ocspChecks = ocsp;
return this;
}
/**
* Builds an {@link OpensslCertChainValidator} according to the parameters set
* for this builder
*
* @return the {@link X509CertChainValidatorExt}
*/
public X509CertChainValidatorExt build() {
RevocationParametersExt revocationParameters = new RevocationParametersExt(
crlChecks, new CRLParameters(), new OCSPParametes(ocspChecks));
ValidatorParamsExt validationParams = new ValidatorParamsExt(
revocationParameters, ProxySupport.ALLOW);
if (storeUpdateListener != null){
validationParams.setInitialListeners(Arrays.asList(storeUpdateListener));
}
boolean openssl1xMode = false;
if (opensslHashFunction == OpensslHashFunction.SHA1){
openssl1xMode = true;
}
OpensslCertChainValidator validator = new OpensslCertChainValidator(
trustAnchorsDir, openssl1xMode, namespaceChecks, trustAnchorsUpdateInterval,
validationParams, lazyAnchorsLoading);
if (validationErrorListener != null){
validator.addValidationListener(validationErrorListener);
}
return validator;
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
* @param storeUpdateListener
* the listener that will receive notifications about trust store
* update events
* @param updateInterval
* the trust anchor store update interval
* @param namespaceChecks
* the namespace checking policy
* @param crlChecks
* the crl checking policy
* @param ocspChecks
* the ocsp checking policy
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener,
StoreUpdateListener storeUpdateListener, long updateInterval,
NamespaceCheckingMode namespaceChecks, CrlCheckingMode crlChecks,
OCSPCheckingMode ocspChecks) {
return buildCertificateValidator(trustAnchorsDir, validationErrorListener,
storeUpdateListener, updateInterval, namespaceChecks, crlChecks,
ocspChecks, true);
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
* @param storeUpdateListener
* the listener that will receive notifications about trust store
* update events
* @param updateInterval
* the trust anchor store update interval
* @param namespaceChecks
* the namespace checking policy
* @param crlChecks
* the crl checking policy
* @param ocspChecks
* the ocsp checking policy
* @param lazy
* whether the validator should be lazy in loading crls and
* certificates
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener,
StoreUpdateListener storeUpdateListener, long updateInterval,
NamespaceCheckingMode namespaceChecks, CrlCheckingMode crlChecks,
OCSPCheckingMode ocspChecks, boolean lazy) {
CertificateValidatorBuilder builder = new CertificateValidatorBuilder();
return builder.trustAnchorsDir(trustAnchorsDir)
.validationErrorListener(validationErrorListener)
.storeUpdateListener(storeUpdateListener)
.trustAnchorsUpdateInterval(updateInterval)
.namespaceChecks(namespaceChecks).crlChecks(crlChecks)
.ocspChecks(ocspChecks).lazyAnchorsLoading(lazy).build();
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener) {
return buildCertificateValidator(trustAnchorsDir, validationErrorListener,
null, 0L, DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS, DEFAULT_OCSP_CHECKS);
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
* @param storeListener
* the listener that will be informed of trust store load errors
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener,
StoreUpdateListener storeListener) {
return buildCertificateValidator(trustAnchorsDir, validationErrorListener,
storeListener, 0L, DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS,
DEFAULT_OCSP_CHECKS);
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
* @param storeListener
* the listener that will be informed of trust store load errors
*
* @param updateInterval
* the trust anchor store update interval
*
* @param lazy
* whether the certificate validator should be lazy in loading crls
* and CAs
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener,
StoreUpdateListener storeListener, long updateInterval, boolean lazy) {
return buildCertificateValidator(trustAnchorsDir, validationErrorListener,
storeListener, updateInterval, DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS,
DEFAULT_OCSP_CHECKS, lazy);
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
* @param storeListener
* the listener that will be informed of trust store load errors
*
* @param updateInterval
* the trust anchor store update interval
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener,
StoreUpdateListener storeListener, long updateInterval) {
return buildCertificateValidator(trustAnchorsDir, validationErrorListener,
storeListener, updateInterval, DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS,
DEFAULT_OCSP_CHECKS);
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
* @param updateInterval
* the trust anchor store update interval
* @param lazy
* whether the certificate validator should be lazy in loading crls
* and CAs
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener,
long updateInterval, boolean lazy) {
return buildCertificateValidator(trustAnchorsDir, validationErrorListener,
null, updateInterval, DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS,
DEFAULT_OCSP_CHECKS, lazy);
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
* @param validationErrorListener
* the listener that will receive notification about validation
* errors
* @param updateInterval
* the trust anchor store update interval
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir, ValidationErrorListener validationErrorListener,
long updateInterval) {
return buildCertificateValidator(trustAnchorsDir, validationErrorListener,
null, updateInterval, DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS,
DEFAULT_OCSP_CHECKS);
}
/**
* Builds an Openssl-style certificate validator configured as specified in
* the parameters
*
* @param trustAnchorsDir
* the directory where trust anchors are loaded from
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*/
public static X509CertChainValidatorExt buildCertificateValidator(
String trustAnchorsDir) {
return buildCertificateValidator(trustAnchorsDir, null, null, 0L,
DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS, DEFAULT_OCSP_CHECKS);
}
/**
* Builds an Openssl-style certificate validator.
*
* @return an Openssl-style certificate validator configured as specified in
* the parameters
*
* @deprecated Create a {@link CertificateValidatorBuilder} object instead.
*/
public static X509CertChainValidatorExt buildCertificateValidator() {
return buildCertificateValidator(
DefaultVOMSValidator.DEFAULT_TRUST_ANCHORS_DIR, null, null, 0L,
DEFAULT_NS_CHECKS, DEFAULT_CRL_CHECKS, DEFAULT_OCSP_CHECKS);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy