List of usage examples for org.bouncycastle.asn1.ocsp OCSPResponseStatus TRY_LATER
int TRY_LATER
To view the source code for org.bouncycastle.asn1.ocsp OCSPResponseStatus TRY_LATER.
Click Source Link
From source file:org.viafirma.nucleo.validacion.OcspValidatorHandler.java
License:Apache License
/** * Valida mediante ocsp RFC 2560, el certificado indicado. * // ww w. j av a 2 s .c om * @param certificadoX509 * Certificado que deseamos validar. * @param certificadoX509Emisor * Certificado emisor del certificado a validar. * @return * @throws CertPathValidatorException */ private CodigoError validarOCSP(X509Certificate certificadoX509, X509Certificate certificadoX509Emisor) throws CertPathValidatorException { // Si la validacin esta desactivada consideramos el certificado // validado. if (validacionOnline) { try { // Generamos la peticin OCSP para el certificado. OCSPReq request = generateRequest(certificadoX509, certificadoX509Emisor); // Recuperamos la url desde la que realizar la validacin OCSP String url = getUrlOCSP(certificadoX509); // Bytes del request byte[] byteRequest = request.getEncoded(); // Enviamos la peticin y recuperamos la respuesta InputStream inResponse = sendRequest(url, byteRequest); OCSPResp ocspResponse = new OCSPResp(inResponse); // but why Response Status is 6(No Valid)..? if (OCSPResponseStatus.SUCCESSFUL == ocspResponse.getStatus()) { log.info("Obtenida respuesta correcta OCSP. Estado:" + ocspResponse.getStatus()); CertificateID certID = new CertificateID(CertificateID.HASH_SHA1, certificadoX509Emisor, certificadoX509.getSerialNumber()); BasicOCSPResp brep = (BasicOCSPResp) ocspResponse.getResponseObject(); // Comprobamos que la respuesta OCSP no ha sido manipulada y // ha sido firmada por un certificado de confianza. // Recupero el certificado con el que debe haber sido // firmado el ocsp checkOCSP(brep); SingleResp[] singleResp = brep.getResponses(); for (SingleResp resp : singleResp) { CertificateID respCertID = resp.getCertID(); if (respCertID.equals(certID)) { Object status = resp.getCertStatus(); if (status == CertificateStatus.GOOD) { log.debug("OCSPChecker: Status of certificate is: good"); break; } else if (status instanceof org.bouncycastle.ocsp.RevokedStatus) { log.debug("OCSPChecker: Status of certificate is: revoked"); throw new CertPathValidatorException("Certificate has been revoked"); } else if (status instanceof org.bouncycastle.ocsp.UnknownStatus) { log.debug("OCSPChecker: Status of certificate is: unknown"); throw new CertPathValidatorException("Certificate's revocation status is unknown"); } else { log.debug("Status of certificate is: not recognized"); throw new CertPathValidatorException("Unknown OCSP response for certificate"); } } } return CodigoError.OK_CERTIFICADO_VALIDADO; } else { /** * successful (0), --Response has valid confirmations * malformedRequest (1), --Illegal confirmation request * internalError (2), --Internal error in issuer tryLater * (3), --Try again later --(4) is not used sigRequired (5), * --Must sign the request unauthorized (6) --Request * unauthorized */ if (OCSPResponseStatus.MALFORMED_REQUEST == ocspResponse.getStatus()) { log.warn( "Obtenida respuesta Incorrecta OCSP: malformedRequest (1), --Illegal confirmation request. estatus: " + ocspResponse.getStatus()); return CodigoError.ERROR_OCSP_URL; } else if (OCSPResponseStatus.INTERNAL_ERROR == ocspResponse.getStatus()) { log.warn( "Obtenida respuesta Incorrecta OCSP: internalError (2),--Internal error in issuer. estatus: " + ocspResponse.getStatus()); return CodigoError.ERROR_OCSP_INTERNAL_ERROR; } else if (OCSPResponseStatus.TRY_LATER == ocspResponse.getStatus()) { log.warn("Obtenida respuesta Incorrecta OCSP: tryLater (3), --Try again later. estatus: " + ocspResponse.getStatus()); return CodigoError.ERROR_OCSP_TRY_LATER; } else if (OCSPResponseStatus.SIG_REQUIRED == ocspResponse.getStatus()) { log.warn( "Obtenida respuesta Incorrecta OCSP: sigRequired(5),--Must sign the request. estatus: " + ocspResponse.getStatus()); return CodigoError.ERROR_OCSP_INTERNAL_ERROR; } else if (OCSPResponseStatus.SIG_REQUIRED == ocspResponse.getStatus()) { log.warn( "Obtenida respuesta Incorrecta OCSP: unauthorized (6)--Request unauthorized. estatus: " + ocspResponse.getStatus()); return CodigoError.ERROR_OCSP_INTERNAL_ERROR; } else { log.warn( "Obtenida una respuesta incorrecta OCSP, probablemente el certificado este caducado."); return CodigoError.ERROR_VALIDACION_CERTIFICADO_CADUCADO; } } } catch (OCSPException e) { log.fatal(CodigoError.ERROR_OCSP_INTERNAL_ERROR, e); return CodigoError.ERROR_OCSP_INTERNAL_ERROR; } catch (ExcepcionErrorInterno e) { log.error("No se puede validar el certificado. ", e); return e.getCodError(); } catch (IOException e) { log.fatal(CodigoError.ERROR_INTERNO, e); return CodigoError.ERROR_INTERNO; } } else { log.info("La validacin online OCSP esta desactivada. Consideramos el certificado Vlido."); return CodigoError.OK_CERTIFICADO_VALIDADO; } }