Example usage for org.bouncycastle.asn1.ocsp OCSPResponseStatus INTERNAL_ERROR

List of usage examples for org.bouncycastle.asn1.ocsp OCSPResponseStatus INTERNAL_ERROR

Introduction

In this page you can find the example usage for org.bouncycastle.asn1.ocsp OCSPResponseStatus INTERNAL_ERROR.

Prototype

int INTERNAL_ERROR

To view the source code for org.bouncycastle.asn1.ocsp OCSPResponseStatus INTERNAL_ERROR.

Click Source Link

Usage

From source file:org.viafirma.nucleo.validacion.OcspValidatorHandler.java

License:Apache License

/**
 * Valida mediante ocsp RFC 2560, el certificado indicado.
 * /*  w  w  w  .  j av a2  s.c o m*/
 * @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;
    }
}