Zertifikat überprüfen/OCSP Response Code 6

pizza1234

Erfahrenes Mitglied
Hi,
ich versuche gerade, eine digitale Signatur aus einem PDF mit OSCP auf Gültigkeit zu überprüfen. Auslesen der Signatur ist kein Problem, aber die Überprüfung scheitert am OCSPResponse, der mir eine Errorcode 6 zurückgibt. laut RFC 2560 ist das ein Fehler und nach längerer Suche scheint mein Errorcode folgendes zu bedeuten:

The response "unauthorized" is returned in cases where the client is
not authorized to make this query to this server.

Mehr Informationen dazu oder wie man den Client authorisieren kann, finde ich nirgendswo!
Vielleicht hab ich ja auch einen Fehler im Code? Hier mal der wichtige Teil!
(JUnit-Testmethode, deshalb noch unsauber!)
Code:
X509Certificate ownCert = (X509Certificate)iter.next();
X509Certificate cacert = (X509Certificate)iter.next();


//send request
OCSPReqGenerator gen = new OCSPReqGenerator();
CertificateID id = new CertificateID(CertificateID.HASH_SHA1,cacert,ownCert.getSerialNumber()) ;
gen.addRequest(id);

//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));

OCSPReq req = gen.generate();
//String serviceAddr="http://ocsp.digsigtrust.com:80/";
String serviceAddr="http://ocsp.verisign.com";
//String serviceAddr="http://onsite-ocsp.verisign.com";
URL url = new URL(serviceAddr);
HttpURLConnection con = (HttpURLConnection)getUrlConnection(url);
con.setDoOutput(true);
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/ocsp-request");
OutputStream out = null;
try
{
	out = con.getOutputStream();
out.write(req.getEncoded());
	
} finally
{
	IOUtils.closeQuietly(out);
}

int responseCode = con.getResponseCode();//200 OK!
if (responseCode != 200)
{
	if (responseCode == 401) 
	{
		System.out.println("Unauthorised");
	} else {
		System.out.println("Unknown");;
	}
	return false;
}

InputStream in = null;
ByteArrayOutputStream baos = null;
byte[] repBytes = null;
try
{
	baos = new ByteArrayOutputStream();
	in = con.getInputStream();
	int b = in.read();
	while(b != -1)
	{
		baos.write(b);
		b = in.read();
	}
	baos.flush();
	repBytes = baos.toByteArray();
}
finally
{
	IOUtils.closeQuietly(baos);
	IOUtils.closeQuietly(in);
}

if(null == repBytes)
	System.out.println("No Answer");
//get response

OCSPResp response = new OCSPResp(new ByteArrayInputStream(repBytes));

System.out.println(response.getStatus()== 6 ? "No Client-Auhorisation!Code 6":"OK");

BasicOCSPResp bas = (BasicOCSPResp)response.getResponseObject();

Vielleicht weiß einer von euch ja Bescheid!
Für den ganzen OCSP-Kram verwende ich übrigens bouncyCastle :http://www.bouncycastle.org/

Schöne Grüße,
Peter
 
Zurück