Validación OCSP

Buenas tardes, hace alrededor de un mes me asignarón un desarrollo donde una validación para el sistema es, uan validación de certificados para conocer el estado del mismo; pero cada vez que realizo una consulta al servidor de OCSP me regresa siempre un numero 3 que interpreto según la documentación que he leido, como intente despues. Quisiera saber si me pudiesen ayudar por que me regresa este numero, no estoy muy seguro si es a causa del código (que adjunto debajo) que recibo esta respuesta.
Saludos.

import java.math.BigInteger;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import java.io.*;
import java.net.*;
import javax.net.ssl.HttpsURLConnection;

import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers;
import org.bouncycastle.asn1.x509.X509Extension;
import org.bouncycastle.asn1.x509.X509Extensions;
import org.bouncycastle.ocsp.CertificateID;
import org.bouncycastle.ocsp.OCSPException;
import org.bouncycastle.ocsp.OCSPReq;
import org.bouncycastle.ocsp.OCSPReqGenerator;
import org.bouncycastle.ocsp.OCSPResp;

public class OCSPClient {

public static OCSPReq generateOCSPRequest(X509Certificate issuerCert, BigInteger serialNumber) throws OCSPException {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

CertificateID id = new CertificateID(CertificateID.HASH_SHA1, issuerCert, serialNumber);

OCSPReqGenerator gen = new OCSPReqGenerator();

gen.addRequest(id);

// create details for nonce extension
BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis());
Vector oids = new Vector();
Vector values = new Vector();

oids.add(OCSPObjectIdentifiers.id_pkix_ocsp_nonce);
values.add(new X509Extension(false, new DEROctetString(nonce.toByteArray())));

gen.setRequestExtensions(new X509Extensions(oids, values));

return gen.generate();
}

public static void main(String[] args) throws Exception {

InputStream inStream = new FileInputStream("C:/camc650531j76.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate interCert = (X509Certificate) cf.generateCertificate(inStream);
inStream.close();

InputStream inStreamRoot = new FileInputStream("C:/AC2_SAT.cer");
X509Certificate rootCert = (X509Certificate) cf.generateCertificate(inStreamRoot);
inStreamRoot.close();

OCSPReq request = generateOCSPRequest(rootCert, interCert.getSerialNumber());

byte[] array = request.getEncoded();

String serviceAddr = "https://cfdit.sat.gob.mx/fielqro/edofiel/";
String hostAddr = "";
if (serviceAddr != null) {
hostAddr = serviceAddr;
try {
if (serviceAddr.startsWith("http")) {
HttpURLConnection con = null;
URL url = new URL((String) serviceAddr);
con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Content-Type", "application/ocsp-request");
con.setRequestProperty("Accept", "application/ocsp-response");
con.setDoOutput(true);
System.out.println(con.getContent());
OutputStream out = con.getOutputStream();
DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(out));

dataOut.write(array);

dataOut.flush();
dataOut.close();

if (con.getResponseCode() / 100 != 2) {
throw new Exception("***Error***");
}

InputStream in = (InputStream) con.getContent();
OCSPResp ocspResponse = new OCSPResp(in);

System.out.println(ocspResponse.getStatus());
System.out.println("...");
} else {
}
} catch (Exception e) {
System.out.println(e);
}
}
}
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

getContent

Estás pidiendo   de la conexión, antes de enviar datos. No te arroja un error eso? Porque se supone que no debes invocar getContent antes de enviar los datos. Por cierto tal vez haga falta pasarle a la conexión que use el método POST. Y dado que estás escribiendo un arreglo de bytes, te sobra envolver el outputStream de la conexión con el DataOutputStream, podrías escribir directamente al outputStream de la conexión (o si quieres, al BufferedOutputStream con el que envuelves el outputStream de la conexión).

VALIDACION OCSP

Hola ezamudio;

estoy trabajando en un código para validar un archivo .cer del SAT anteriormente ya estaba funcionando pero el certificado ya se venció por lo que me marca un status de "REVOKE", sin embargo, cuando cambio el certificado por uno vigente me arroja un nullpointerexception cuando lo valido.

el código que utilizo para definir el archivo .cer es el siguiente:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

String ocspUrl = "https://cfdit.sat.gob.mx/edofiel";

InputStream inStreamCA = new FileInputStream("C:\\efirma\\ac2_4096.crt");
Certificate cacert = CertificateFactory.getInstance("X.509").generateCertificate(inStreamCA);//you must set your ca certificate obj
inStreamCA.close();

InputStream inStream = new FileInputStream("C:\\efirma\\gava730717ae1.cer");
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate) factory.generateCertificate(inStream);
BigInteger usrCertSerialNumber = certificate.getSerialNumber();
System.out.println("No. certificado: " + usrCertSerialNumber);
inStream.close();

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
cuando cambio el archivo "gava730717ae1.cer" por "kicr630120nx3.cer" al momento de obtener el estatus con el OCSP del SAT me da 3 por lo que no puedo obtener el estatus del certificado, sin embargo cuando pruebo con el certificado vencido el estatus que me regresa el OCSP del SAT es 0 y con este si puedo obtener el estatus del certificado, esta es la función que utilizo para obtener el estatus:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
private static void makeOcspResponse(HttpURLConnection con) throws IOException, OCSPException {

System.out.println("con: "+con);
OCSPResp response;
InputStream in = con.getInputStream();

try {
response = new OCSPResp(in);
} finally {
in.close();
}

System.out.println("response: "+response.getStatus()+" "+response.getClass().toString()); <--------------En este apartado es donde obtengo un estatus de 3 con el nuevo certificado por lo que me envía al catch con NULL y ya no entra a validarlo.

try {
BasicOCSPResp brep;
brep = (BasicOCSPResp) response.getResponseObject();
System.out.println(brep.getResponses());
SingleResp[] singleResps = brep.getResponses();
SingleResp singleResp = singleResps[0];
Object status = singleResp.getCertStatus();
System.out.println(status);
if (status == null) {
System.out.println("OCSP Response is GOOD");
}
if (status instanceof RevokedStatus) {
System.out.println("OCSP Response is REVOKED");
}
if (status instanceof UnknownStatus) {
System.out.println("OCSP Response is UNKNOWN");
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}

}
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

De antemano agradezco la ayuda que me puedas proporcionar, saludos.