All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.europa.esig.dss.tsl.validation.TLValidatorTask Maven / Gradle / Ivy

/**
 * DSS - Digital Signature Services
 * Copyright (C) 2015 European Commission, provided under the CEF programme
 * 

* This file is part of the "DSS - Digital Signature Services" project. *

* This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *

* This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. *

* You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package eu.europa.esig.dss.tsl.validation; import eu.europa.esig.dss.diagnostic.CertificateWrapper; import eu.europa.esig.dss.diagnostic.DiagnosticData; import eu.europa.esig.dss.diagnostic.SignatureWrapper; import eu.europa.esig.dss.enumerations.Indication; import eu.europa.esig.dss.enumerations.SubIndication; import eu.europa.esig.dss.enumerations.TokenExtractionStrategy; import eu.europa.esig.dss.enumerations.ValidationLevel; import eu.europa.esig.dss.model.DSSDocument; import eu.europa.esig.dss.model.DSSException; import eu.europa.esig.dss.model.x509.CertificateToken; import eu.europa.esig.dss.policy.ValidationPolicy; import eu.europa.esig.dss.policy.ValidationPolicyFacade; import eu.europa.esig.dss.simplereport.SimpleReport; import eu.europa.esig.dss.spi.DSSUtils; import eu.europa.esig.dss.spi.policy.SignaturePolicyProvider; import eu.europa.esig.dss.spi.validation.CertificateVerifier; import eu.europa.esig.dss.spi.validation.CommonCertificateVerifier; import eu.europa.esig.dss.spi.validation.executor.SkipValidationContextExecutor; import eu.europa.esig.dss.spi.x509.CertificateSource; import eu.europa.esig.dss.spi.x509.CommonTrustedCertificateSource; import eu.europa.esig.dss.spi.x509.TrustedCertificateSource; import eu.europa.esig.dss.validation.reports.Reports; import eu.europa.esig.dss.xades.definition.XAdESPath; import eu.europa.esig.dss.xades.definition.xades132.XAdES132Path; import eu.europa.esig.dss.xades.validation.XMLDocumentValidator; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.function.Supplier; /** * This class allows to validate TL or LOTL. */ public class TLValidatorTask implements Supplier { /** The Trusted List document to validate */ private final DSSDocument trustedList; /** The certificate source to use */ private final CertificateSource certificateSource; /** * Constructor used to instantiate a validator for a trusted list * * @param trustedList the DSSDocument with a trusted list * @param certificateSource a certificate source with the allowed certificates * to sign this TL */ public TLValidatorTask(DSSDocument trustedList, CertificateSource certificateSource) { Objects.requireNonNull(trustedList, "The document is null"); Objects.requireNonNull(certificateSource, "The certificate source is null"); this.trustedList = trustedList; this.certificateSource = certificateSource; } @Override public ValidationResult get() { Reports reports = validateTL(); return fillResult(reports); } private Reports validateTL() { final CertificateVerifier certificateVerifier = new CommonCertificateVerifier(true); certificateVerifier.setTrustedCertSources(buildTrustedCertificateSource(certificateSource)); final XMLDocumentValidator xmlDocumentValidator = new XMLDocumentValidator(trustedList); xmlDocumentValidator.setCertificateVerifier(certificateVerifier); xmlDocumentValidator.setTokenExtractionStrategy(TokenExtractionStrategy.EXTRACT_CERTIFICATES_ONLY); xmlDocumentValidator.setEnableEtsiValidationReport(false); // Ignore ETSI VR xmlDocumentValidator.setValidationLevel(ValidationLevel.BASIC_SIGNATURES); // Timestamps,... are ignored xmlDocumentValidator.setValidationContextExecutor(SkipValidationContextExecutor.INSTANCE); // Only need to validate against the trusted certificate source xmlDocumentValidator.setSignaturePolicyProvider(new SignaturePolicyProvider()); // ignore signature policy loading // To increase the security: the default {@code XAdESPaths} is used. List xadesPathsHolders = xmlDocumentValidator.getXAdESPathsHolder(); xadesPathsHolders.clear(); xadesPathsHolders.add(new XAdES132Path()); return xmlDocumentValidator.validateDocument(getTrustedListValidationPolicy()); } private ValidationResult fillResult(Reports reports) { SimpleReport simpleReport = reports.getSimpleReport(); if (simpleReport.getSignaturesCount() != 1) { throw new DSSException(String.format("Number of signatures must be equal to 1 (currently : %s)", simpleReport.getSignaturesCount())); } Indication indication = simpleReport.getIndication(simpleReport.getFirstSignatureId()); SubIndication subIndication = simpleReport.getSubIndication(simpleReport.getFirstSignatureId()); DiagnosticData diagnosticData = reports.getDiagnosticData(); SignatureWrapper signatureWrapper = diagnosticData.getSignatureById(diagnosticData.getFirstSignatureId()); Date signingTime = signatureWrapper.getClaimedSigningTime(); CertificateWrapper signingCertificateWrapper = signatureWrapper.getSigningCertificate(); CertificateToken signingCertificate = null; if (signingCertificateWrapper != null) { signingCertificate = DSSUtils.loadCertificate(signingCertificateWrapper.getBinaries()); } return new ValidationResult(indication, subIndication, signingTime, signingCertificate, certificateSource); } private TrustedCertificateSource buildTrustedCertificateSource(CertificateSource certificateSource) { CommonTrustedCertificateSource commonTrustedCertificateSource = new CommonTrustedCertificateSource(); commonTrustedCertificateSource.importAsTrusted(certificateSource); return commonTrustedCertificateSource; } private ValidationPolicy getTrustedListValidationPolicy() { try { return ValidationPolicyFacade.newFacade().getTrustedListValidationPolicy(); } catch (Exception e) { throw new DSSException("Unable to load the validation policy for trusted list", e); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy