69 X509Certificate issuer = issuers.get(0);
70 ValidationStatus status =
new ValidationStatus(certificate, issuer, validationDate, ValidatorSourceType.OCSP, CertificateValidity.UNKNOWN);
73 Principal subjectX500Principal = certificate.getSubjectX500Principal();
76 if (ocspUrl == null) {
77 log.error(
"OCSP URL for '" + subjectX500Principal +
"' is empty");
81 log.debug(
"OCSP URL for '" + subjectX500Principal +
"' is '" + ocspUrl +
"'");
83 DigestCalculator digestCalculator =
new JcaDigestCalculatorProviderBuilder().build().get(CertificateID.HASH_SHA1);
84 CertificateID certificateId =
new CertificateID(digestCalculator,
new JcaX509CertificateHolder(certificate), certificate.getSerialNumber());
91 if (ocspResp.getStatus() != OCSPRespBuilder.SUCCESSFUL) {
92 log.error(
"OCSP response is invalid!");
93 status.setValidity(CertificateValidity.INVALID);
97 boolean foundResponse =
false;
98 BasicOCSPResp basicOCSPResp = (BasicOCSPResp) ocspResp.getResponseObject();
99 SingleResp[] singleResps = basicOCSPResp.getResponses();
100 for (SingleResp singleResp : singleResps) {
101 CertificateID responseCertificateId = singleResp.getCertID();
102 if (!certificateId.equals(responseCertificateId)) {
106 foundResponse =
true;
108 log.debug(
"OCSP validationDate: " + validationDate);
109 log.debug(
"OCSP thisUpdate: " + singleResp.getThisUpdate());
110 log.debug(
"OCSP nextUpdate: " + singleResp.getNextUpdate());
112 status.setRevocationObjectIssuingTime(basicOCSPResp.getProducedAt());
114 Object certStatus = singleResp.getCertStatus();
115 if (certStatus == CertificateStatus.GOOD) {
116 log.debug(
"OCSP status is valid for '" + certificate.getSubjectX500Principal() +
"'");
117 status.setValidity(CertificateValidity.VALID);
119 if (singleResp.getCertStatus() instanceof RevokedStatus) {
120 log.warn(
"OCSP status is revoked for: " + subjectX500Principal);
121 if (validationDate.before(((RevokedStatus) singleResp.getCertStatus()).getRevocationTime())) {
122 log.warn(
"OCSP revocation time after the validation date, the certificate '" + subjectX500Principal +
"' was valid at " + validationDate);
123 status.setValidity(CertificateValidity.VALID);
125 Date revocationDate = ((RevokedStatus) singleResp.getCertStatus()).getRevocationTime();
126 log.info(
"OCSP for certificate '" + subjectX500Principal +
"' is revoked since " + revocationDate);
127 status.setRevocationDate(revocationDate);
128 status.setRevocationObjectIssuingTime(singleResp.getThisUpdate());
129 status.setValidity(CertificateValidity.REVOKED);
135 if (!foundResponse) {
136 log.error(
"There is no matching OCSP response entries");
138 }
catch (Exception ex) {
139 log.error(
"OCSP exception: ", ex);
String getOCSPUrl(X509Certificate certificate)
Definition: OCSPCertificateVerifier.java:155
OCSPReq generateOCSPRequest(CertificateID certificateId)
Definition: OCSPCertificateVerifier.java:145
static final Logger log
Definition: OCSPCertificateVerifier.java:61
OCSPResp requestOCSPResponse(String url, OCSPReq ocspReq)
Definition: OCSPCertificateVerifier.java:190