diff --git a/pom.xml b/pom.xml
index ea798a5f4..a6e3ba52d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,12 +7,12 @@
org.springframework.boot
spring-boot-starter-parent
- 3.3.1
+ 3.3.3
org.esupportail
esup-signature
- 1.29.15
+ 1.29.16-SNAPSHOT
esup-signature
org.esupportail.esupsignature.EsupSignatureApplication
@@ -781,7 +781,8 @@
compile
-
+
diff --git a/src/main/java/org/esupportail/esupsignature/service/utils/sign/NexuService.java b/src/main/java/org/esupportail/esupsignature/service/utils/sign/NexuService.java
index b148143e2..2f1666303 100644
--- a/src/main/java/org/esupportail/esupsignature/service/utils/sign/NexuService.java
+++ b/src/main/java/org/esupportail/esupsignature/service/utils/sign/NexuService.java
@@ -126,7 +126,7 @@ public DSSDocument signDocument(Long id, String userEppn, SignatureDocumentForm
SignatureAlgorithm sigAlgorithm = SignatureAlgorithm.getAlgorithm(signatureDocumentForm.getEncryptionAlgorithm(), signatureDocumentForm.getDigestAlgorithm());
SignatureValue signatureValue = new SignatureValue(sigAlgorithm, signatureDocumentForm.getSignatureValue());
AbstractSignatureParameters parameters = getSignatureParameters(signRequest, userEppn, signatureDocumentForm, documentsToSign);
- validationService.checkRevocation(DSSUtils.loadCertificate(signatureDocumentForm.getCertificate()), parameters);
+ validationService.checkRevocation(signatureDocumentForm, DSSUtils.loadCertificate(signatureDocumentForm.getCertificate()), parameters);
try {
logger.info("End signDocument with one document");
return service.signDocument(toSignDssDocument, parameters, signatureValue);
diff --git a/src/main/java/org/esupportail/esupsignature/service/utils/sign/SignService.java b/src/main/java/org/esupportail/esupsignature/service/utils/sign/SignService.java
index e865de559..de41b7704 100644
--- a/src/main/java/org/esupportail/esupsignature/service/utils/sign/SignService.java
+++ b/src/main/java/org/esupportail/esupsignature/service/utils/sign/SignService.java
@@ -219,7 +219,7 @@ public Document certSign(SignRequest signRequest, String userEppn, String passwo
}
parameters.setSigningCertificate(certificateToken);
parameters.setCertificateChain(certificateTokenChain);
- validationService.checkRevocation(certificateToken, parameters);
+ validationService.checkRevocation(signatureDocumentForm, certificateToken, parameters);
DSSDocument dssDocument;
if (signatureDocumentForm instanceof SignatureMultipleDocumentsForm) {
dssDocument = certSignDocument((SignatureMultipleDocumentsForm) signatureDocumentForm, parameters, abstractKeyStoreTokenConnection);
diff --git a/src/main/java/org/esupportail/esupsignature/service/utils/sign/ValidationService.java b/src/main/java/org/esupportail/esupsignature/service/utils/sign/ValidationService.java
index 564b9a4fe..8999b8282 100644
--- a/src/main/java/org/esupportail/esupsignature/service/utils/sign/ValidationService.java
+++ b/src/main/java/org/esupportail/esupsignature/service/utils/sign/ValidationService.java
@@ -1,6 +1,7 @@
package org.esupportail.esupsignature.service.utils.sign;
import eu.europa.esig.dss.AbstractSignatureParameters;
+import eu.europa.esig.dss.enumerations.Indication;
import eu.europa.esig.dss.enumerations.SignatureLevel;
import eu.europa.esig.dss.enumerations.TokenExtractionStrategy;
import eu.europa.esig.dss.model.DSSDocument;
@@ -14,13 +15,16 @@
import eu.europa.esig.dss.validation.reports.Reports;
import jakarta.annotation.Resource;
import org.esupportail.esupsignature.dss.DssUtilsService;
+import org.esupportail.esupsignature.dss.model.AbstractSignatureForm;
import org.esupportail.esupsignature.dss.model.DssMultipartFile;
+import org.esupportail.esupsignature.dss.model.SignatureDocumentForm;
import org.esupportail.esupsignature.exception.EsupSignatureRuntimeException;
import org.esupportail.esupsignature.service.utils.file.FileService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.*;
@@ -82,9 +86,17 @@ public Reports validate(InputStream docInputStream, InputStream signInputStream)
return null;
}
- public void checkRevocation(CertificateToken certificateToken, AbstractSignatureParameters> parameters) {
+ public void checkRevocation(AbstractSignatureForm signatureDocumentForm, CertificateToken certificateToken, AbstractSignatureParameters> parameters) {
RevocationToken revocationToken = null;
+ boolean containsBadSignature = false;
try {
+ Reports reports = validate(new ByteArrayInputStream(((SignatureDocumentForm) signatureDocumentForm).getDocumentToSign().getBytes()), null);
+ for(String signatureId : reports.getSimpleReport().getSignatureIdList()) {
+ if(!reports.getSimpleReport().getIndication(signatureId).equals(Indication.TOTAL_FAILED)) {
+ containsBadSignature = true;
+ break;
+ }
+ }
revocationToken = certificateVerifier.getOcspSource().getRevocationToken(certificateToken, certificateToken);
} catch (Exception e) {
logger.warn("revocation check fail " + e.getMessage());
@@ -92,7 +104,7 @@ public void checkRevocation(CertificateToken certificateToken, AbstractSignature
throw new EsupSignatureRuntimeException("Impossible de signer avec ce certificat. Détails : " + e.getMessage());
}
}
- if(revocationToken != null && !certificateVerifier.getRevocationDataVerifier().isAcceptable(revocationToken)
+ if(containsBadSignature || revocationToken != null && !certificateVerifier.getRevocationDataVerifier().isAcceptable(revocationToken)
|| (!certificateToken.isValidOn(new Date()) && parameters.isSignWithExpiredCertificate())) {
logger.warn("LT or LTA signature level not supported, switching to T level");
if(parameters.getSignatureLevel().name().contains("_LT") || parameters.getSignatureLevel().name().contains("_LTA")) {