Validar Certificado (DNIe) OCSP
Hola a todos,
Estoy trabajando en un proyecto y me he atascado en un punto y es que no se como puedo Validar un Certificado a través de un servidor OCSP. Estoy trabajando con Java y el DNIe.
Si alguien me pudiera ayudar estaría muy agradecido.
Gracias!

- 2419 lecturas
Twitter

La infraestructura del DNIe
La infraestructura del DNIe tiene un servicio de validacion OCSP en ocsp.dnie.es:80
Para hacerle la peticion puedes usar el API de Java que a partir de la versión 1.5 ya da soporte para validación OCSP
(http://java.sun.com/j2se/1.5.0/docs/guide/security/pki-tiger.html)
saludos
DNIe
Gracias por tu ayuda, de verdad.
De todos modos, una vez retoco las propiedades de OCSP (Security.setProperty), no se como se realiza la petición con el certificado que deseo comprobar si ha sido revocado. En la documentación explica mil cosas que no me quedan demasiado claras.
Si fuerais tan amables de ayudarme...
Saludos y gracias de nuevo
BouncyCastle
Hola,
yo también estoy haciendo lo mismo. Llevo un rato buscando y no me aclaro mucho.
He encontrado estas librerías que pueden ayudarte:
http://www.bouncycastle.org
Yo lo necesito para comprobar la validez de un certificado desde mi AppServer. No sé si es eso lo que se puede configurar en la 1.5.
Desde luego estas librerías son más claras
Te dejo aquí el cliente Java que las utiliza.
Saludos
Ignacio
import java.math.BigInteger;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import java.io.*;
import java.net.*;
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
{
//Add provider BC
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
// Generate the id for the certificate we are looking for
CertificateID id = new CertificateID(CertificateID.HASH_SHA1, issuerCert, serialNumber);
// basic request generation with nonce
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
{
//Read user Certificate
InputStream inStream = new FileInputStream("C:/oscar/Proyectos/OCSP/veri_viabcp.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate interCert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
//Read CA Certificate
InputStream inStreamRoot = new FileInputStream("C:/oscar/Proyectos/OCSP/veri_root.cer");
X509Certificate rootCert = (X509Certificate)cf.generateCertificate(inStreamRoot);
inStreamRoot.close();
OCSPReq request = generateOCSPRequest(rootCert, interCert.getSerialNumber());
//Codificate request:
byte[] array = request.getEncoded();
//Send request:
//serviceAddr URL OCSP service
//String serviceAddr="http://ocsp.digsigtrust.com:80/";
//String serviceAddr="http://ocsp.verisign.com";
String serviceAddr="http://onsite-ocsp.verisign.com";
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);
OutputStream out = con.getOutputStream();
DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(out));
//Escribo el request
dataOut.write(array);
dataOut.flush();
dataOut.close();
//Check errors in response:
if (con.getResponseCode() / 100 != 2) {
throw new Exception("***Error***");
}
//Get Response
InputStream in = (InputStream) con.getContent();
OCSPResp ocspResponse = new OCSPResp(in);
/**
... DECODING THE RESPONSE [2] ...
*/
System.out.println(ocspResponse.getStatus());
System.out.println("...");
}
else {
//HTTPS
//HttpsURLConnection
//...
}
}
catch (Exception e) {
System.out.println(e);
}
}
}
}