Skip to content

Commit 9c7b962

Browse files
committed
PDFBOX-5936: make issuers a Set
git-svn-id: https://svn.apache.org/repos/asf/pdfbox/trunk@1923257 13f79535-47bb-0310-9956-ffa450edef68
1 parent a2d376b commit 9c7b962

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

examples/src/main/java/org/apache/pdfbox/examples/signature/validation/AddValidationInformation.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ private void addRevocationDataRecursive(CertSignatureInformation certInfo) throw
279279
boolean isRevocationInfoFound = foundRevocationInformation.contains(certInfo.getCertificate());
280280
if (!isRevocationInfoFound)
281281
{
282-
if (certInfo.getOcspUrl() != null && certInfo.getIssuerCertificate() != null)
282+
if (certInfo.getOcspUrl() != null && !certInfo.getIssuerCertificates().isEmpty())
283283
{
284284
isRevocationInfoFound = fetchOcspData(certInfo);
285285
}
@@ -328,7 +328,8 @@ private boolean fetchOcspData(CertSignatureInformation certInfo) throws IOExcept
328328
}
329329
catch (OCSPException | CertificateProccessingException | IOException | URISyntaxException e)
330330
{
331-
LOG.error("Failed fetching OCSP at {}", certInfo.getOcspUrl(), e);
331+
LOG.error("Failed fetching OCSP at '{}' for '{}'", certInfo.getOcspUrl(),
332+
certInfo.getCertificate().getSubjectX500Principal(), e);
332333
return false;
333334
}
334335
catch (RevokedCertificateException e)
@@ -371,13 +372,21 @@ private void addOcspData(CertSignatureInformation certInfo) throws IOException,
371372
CertificateProccessingException, RevokedCertificateException, URISyntaxException
372373
{
373374
X509Certificate certificate = certInfo.getCertificate();
374-
X509Certificate issuerCertificate = certInfo.getIssuerCertificate();
375-
String ocspURL = certInfo.getOcspUrl();
376375
if (ocspChecked.contains(certificate))
377376
{
378377
// This certificate has been OCSP-checked before
379378
return;
380379
}
380+
for (X509Certificate issuerCertificate : certInfo.getIssuerCertificates())
381+
{
382+
addOcspData(certificate, issuerCertificate, certInfo.getOcspUrl());
383+
}
384+
}
385+
386+
private void addOcspData(X509Certificate certificate, X509Certificate issuerCertificate, String ocspURL)
387+
throws IOException, OCSPException, CertificateProccessingException,
388+
RevokedCertificateException, URISyntaxException
389+
{
381390
OcspHelper ocspHelper = new OcspHelper(
382391
certificate,
383392
signDate.getTime(),

examples/src/main/java/org/apache/pdfbox/examples/signature/validation/CertInformationCollector.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ private CertSignatureInformation getCertInfo(byte[] signatureContent)
106106
{
107107
rootCertInfo = new CertSignatureInformation();
108108

109+
// https://www.etsi.org/deliver/etsi_ts/102700_102799/10277804/01.01.02_60/ts_10277804v010102p.pdf
110+
// The key of each entry in this dictionary is the base-16-encoded (uppercase)
111+
// SHA1 digest of the signature to which it applies
109112
rootCertInfo.signatureHash = CertInformationHelper.getSha1Hash(signatureContent);
110113

111114
try
@@ -251,7 +254,7 @@ private void traverseChain(X509Certificate certificate, CertSignatureInformation
251254
certificate.verify(issuer.getPublicKey(), SecurityProvider.getProvider());
252255
LOG.info("Found issuer for Cert: {}\n{}",
253256
certificate.getSubjectX500Principal(), issuer.getSubjectX500Principal());
254-
certInfo.issuerCertificate = issuer;
257+
certInfo.issuerCertificates.add(issuer);
255258
certInfo.certChain = new CertSignatureInformation();
256259
traverseChain(issuer, certInfo.certChain, maxDepth - 1);
257260
++count;
@@ -261,7 +264,7 @@ private void traverseChain(X509Certificate certificate, CertSignatureInformation
261264
// not the issuer
262265
}
263266
}
264-
if (certInfo.issuerCertificate == null)
267+
if (certInfo.issuerCertificates.isEmpty())
265268
{
266269
throw new IOException(
267270
"No Issuer Certificate found for Cert: '" +
@@ -412,7 +415,7 @@ public static class CertSignatureInformation
412415
private String ocspUrl;
413416
private String crlUrl;
414417
private String issuerUrl;
415-
private X509Certificate issuerCertificate;
418+
private final Set<X509Certificate> issuerCertificates = new HashSet<>();
416419
private CertSignatureInformation certChain;
417420
private CertSignatureInformation tsaCerts;
418421
private CertSignatureInformation alternativeCertChain;
@@ -447,9 +450,9 @@ public boolean isSelfSigned()
447450
return isSelfSigned;
448451
}
449452

450-
public X509Certificate getIssuerCertificate()
453+
public Set<X509Certificate> getIssuerCertificates()
451454
{
452-
return issuerCertificate;
455+
return issuerCertificates;
453456
}
454457

455458
public String getSignatureHash()

0 commit comments

Comments
 (0)