Hola que tal, les comento que estoy tratando de validar un certificado para ser preciso es el *.cer, estoy ocupando las librerias de bouncycastle y siempre me manda que el servidor esta ocupado, alquien sabe por que? les dejo parte del codigo ya que llevo varios dias con ello saludos..
CertificateID certificadoId = null;
X509Certificate cert =null;
X509Certificate cert2 =null;
BigInteger serial =null;
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider ());
try {
InputStream fr = new FileInputStream("c://******.cer");
CertificateFactory cf =
CertificateFactory.getInstance("X509");
cert = (X509Certificate)
cf.generateCertificate(fr);
serial = cert.getSerialNumber();
serial = new BigInteger("0");
FileInputStream fr2 = new FileInputStream("c://*****.crt");
CertificateFactory cf2 =
CertificateFactory.getInstance("X509");
cert2 = (X509Certificate)
cf.generateCertificate(fr2);
//add
TrustAnchor ta = new TrustAnchor(cert, null);
Set trustedCertsSet = new HashSet();
trustedCertsSet.add(ta);
//
} catch (Exception e) {
e.printStackTrace();
}
/*Se genera la petición con el certificado a verificar y su número de serie*/
OCSPReqGenerator ocspReqGen = new OCSPReqGenerator();
try {
certificadoId = new CertificateID(CertificateID.HASH_SHA1,cert2, serial);
} catch (OCSPException e) {
e.getMessage();
}
//ocspReqGen.addRequest(new CertificateID(CertificateID.HASH_SHA1,cert, cert.getSerialNumber()));
try {
ocspReqGen.addRequest(certificadoId);
BigInteger time = BigInteger.valueOf(System.currentTimeMillis());
Vector<DERObjectIdentifier> oids = new Vector<DERObjectIdentifier>();
Vector<X509Extension> values = new Vector<X509Extension>();
oids.add(OCSPObjectIdentifiers.id_pkix_ocsp_nonce) ;
values.add(new X509Extension(false, new DEROctetString(time.toByteArray())));
ocspReqGen.setRequestExtensions(new X509Extensions(oids, values));
OCSPReq ocspReq = ocspReqGen.generate();
byte[] ocsp= ocspReq.getEncoded();
/* Se establece la conexión HTTP con el ocsp */
URL url = new URL("http://www.sat.gob.mx/ocsp");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
/* Se configuran las propiedades de la petición HTTP */
con.setRequestProperty("Content-Type", "application/ocsp-request");
con.setRequestProperty("Accept", "application/ocsp-response");
con.setRequestMethod("POST");
//con.setRequestProperty("Content-Length", String.valueOf(ocsp.length));
con.setDoOutput(true);
con.connect();
OutputStream out = con.getOutputStream();
DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(out));
//out.write(ocsp,0,ocsp.length);
//out.close();
/* Se obtiene la respuesta del servidor OCSP */
dataOut.write(ocspReq.getEncoded());
dataOut.flush();
dataOut.close();
/* Se parsea la respuesta y se obtiene el estado del certificado retornado por el OCSP */
InputStream in = (InputStream) con.getContent();
//OutputStream bs = new FileOutputStream("Ocsp.resp");
OCSPResp ocspResponse = new OCSPResp(in);
//comprobar si la respuesta es successfull
/* Se verifica el tipo de respuesta enviada*/
int status = ocspResponse.getStatus();
if(ocspResponse.getStatus() == OCSPResponseStatus.SUCCESSFUL){
System.out.println("RESPUESTA:: Response has valid confirmations");
}else if (ocspResponse.getStatus() == OCSPResponseStatus.INTERNAL_ERROR){
System.out.println("RESPUESTA:: Internal error in issuer");
}else if (ocspResponse.getStatus() == OCSPResponseStatus.MALFORMED_REQUEST){
System.out.println("RESPUESTA:: Illegal confirmation request");
}else if(ocspResponse.getStatus() == OCSPResponseStatus.SIG_REQUIRED){
System.out.println("RESPUESTA:: Must sign the request");
}else if(ocspResponse.getStatus() == OCSPResponseStatus.TRY_LATER){
System.out.println("RESPUESTA:: Try again later.");
}else if (ocspResponse.getStatus() == OCSPResponseStatus.UNAUTHORIZED){
System.out.println("RESPUESTA:: Request unauthorized");
}
} catch (Exception e) {
e.printStackTrace();
}
salu2.