2020 * SOFTWARE.
2121 */
2222
23- package eu .webeid .security . validator .certvalidators ;
23+ package eu .webeid .ocsp .certvalidators ;
2424
2525import eu .webeid .security .exceptions .AuthTokenException ;
2626import eu .webeid .security .exceptions .UserCertificateOCSPCheckFailedException ;
2727import eu .webeid .security .util .DateAndTime ;
28- import eu .webeid .security .validator .ocsp .DigestCalculatorImpl ;
29- import eu .webeid .security .validator .ocsp .OcspClient ;
30- import eu .webeid .security .validator .ocsp .OcspRequestBuilder ;
31- import eu .webeid .security .validator .ocsp .OcspResponseValidator ;
32- import eu .webeid .security .validator .ocsp .OcspServiceProvider ;
33- import eu .webeid .security .validator .ocsp .service .OcspService ;
28+ import eu .webeid .ocsp .DigestCalculatorImpl ;
29+ import eu .webeid .ocsp .OcspClient ;
30+ import eu .webeid .ocsp .OcspRequestBuilder ;
31+ import eu .webeid .ocsp .OcspResponseValidator ;
32+ import eu .webeid .ocsp .OcspServiceProvider ;
33+ import eu .webeid .ocsp .service .OcspService ;
34+ import eu .webeid .security .validator .revocationcheck .OcspCertificateRevocationChecker ;
35+ import eu .webeid .security .validator .revocationcheck .RevocationInfo ;
3436import org .bouncycastle .asn1 .ocsp .OCSPObjectIdentifiers ;
3537import org .bouncycastle .asn1 .ocsp .OCSPResponseStatus ;
3638import org .bouncycastle .asn1 .x509 .Extension ;
5557import java .security .cert .X509Certificate ;
5658import java .time .Duration ;
5759import java .util .Date ;
58- import java .util .Objects ;
5960
60- public final class SubjectCertificateNotRevokedValidator {
61+ import static java .util .Objects .requireNonNull ;
62+
63+ public final class SubjectCertificateNotRevokedValidator implements OcspCertificateRevocationChecker {
6164
6265 private static final Logger LOG = LoggerFactory .getLogger (SubjectCertificateNotRevokedValidator .class );
6366
64- private final SubjectCertificateTrustedValidator trustValidator ;
6567 private final OcspClient ocspClient ;
6668 private final OcspServiceProvider ocspServiceProvider ;
6769 private final Duration allowedOcspResponseTimeSkew ;
@@ -71,12 +73,10 @@ public final class SubjectCertificateNotRevokedValidator {
7173 Security .addProvider (new BouncyCastleProvider ());
7274 }
7375
74- public SubjectCertificateNotRevokedValidator (SubjectCertificateTrustedValidator trustValidator ,
75- OcspClient ocspClient ,
76+ public SubjectCertificateNotRevokedValidator (OcspClient ocspClient ,
7677 OcspServiceProvider ocspServiceProvider ,
7778 Duration allowedOcspResponseTimeSkew ,
7879 Duration maxOcspResponseThisUpdateAge ) {
79- this .trustValidator = trustValidator ;
8080 this .ocspClient = ocspClient ;
8181 this .ocspServiceProvider = ocspServiceProvider ;
8282 this .allowedOcspResponseTimeSkew = allowedOcspResponseTimeSkew ;
@@ -89,12 +89,11 @@ public SubjectCertificateNotRevokedValidator(SubjectCertificateTrustedValidator
8989 * @param subjectCertificate user certificate to be validated
9090 * @throws AuthTokenException when user certificate is revoked or revocation check fails.
9191 */
92- public void validateCertificateNotRevoked (X509Certificate subjectCertificate ) throws AuthTokenException {
92+ public RevocationInfo validateCertificateNotRevoked (X509Certificate subjectCertificate , X509Certificate issuerCertificate ) throws AuthTokenException {
9393 try {
9494 OcspService ocspService = ocspServiceProvider .getService (subjectCertificate );
9595
96- final CertificateID certificateId = getCertificateId (subjectCertificate ,
97- Objects .requireNonNull (trustValidator .getSubjectCertificateIssuerCertificate ()));
96+ final CertificateID certificateId = getCertificateId (subjectCertificate , requireNonNull (issuerCertificate ));
9897
9998 final OCSPReq request = new OcspRequestBuilder ()
10099 .withCertificateId (certificateId )
@@ -106,7 +105,7 @@ public void validateCertificateNotRevoked(X509Certificate subjectCertificate) th
106105 }
107106
108107 LOG .debug ("Sending OCSP request" );
109- final OCSPResp response = Objects . requireNonNull (ocspClient .request (ocspService .getAccessLocation (), request ));
108+ final OCSPResp response = requireNonNull (ocspClient .request (ocspService .getAccessLocation (), request ));
110109 if (response .getStatus () != OCSPResponseStatus .SUCCESSFUL ) {
111110 throw new UserCertificateOCSPCheckFailedException ("Response status: " + ocspStatusToString (response .getStatus ()));
112111 }
@@ -122,6 +121,8 @@ public void validateCertificateNotRevoked(X509Certificate subjectCertificate) th
122121 } catch (OCSPException | CertificateException | OperatorCreationException | IOException e ) {
123122 throw new UserCertificateOCSPCheckFailedException (e );
124123 }
124+ // FIXME:
125+ return null ;
125126 }
126127
127128 private void verifyOcspResponse (BasicOCSPResp basicResponse , OcspService ocspService , CertificateID requestCertificateId ) throws AuthTokenException , OCSPException , CertificateException , OperatorCreationException {
@@ -202,20 +203,14 @@ private static CertificateID getCertificateId(X509Certificate subjectCertificate
202203 }
203204
204205 private static String ocspStatusToString (int status ) {
205- switch (status ) {
206- case OCSPResp .MALFORMED_REQUEST :
207- return "malformed request" ;
208- case OCSPResp .INTERNAL_ERROR :
209- return "internal error" ;
210- case OCSPResp .TRY_LATER :
211- return "service unavailable" ;
212- case OCSPResp .SIG_REQUIRED :
213- return "request signature missing" ;
214- case OCSPResp .UNAUTHORIZED :
215- return "unauthorized" ;
216- default :
217- return "unknown" ;
218- }
206+ return switch (status ) {
207+ case OCSPResp .MALFORMED_REQUEST -> "malformed request" ;
208+ case OCSPResp .INTERNAL_ERROR -> "internal error" ;
209+ case OCSPResp .TRY_LATER -> "service unavailable" ;
210+ case OCSPResp .SIG_REQUIRED -> "request signature missing" ;
211+ case OCSPResp .UNAUTHORIZED -> "unauthorized" ;
212+ default -> "unknown" ;
213+ };
219214 }
220215
221216}
0 commit comments