2009-09-30 10 views
1

Je travaille actuellement sur l'obtention d'une application Java (JRE 1.5+) pour communiquer avec un répondeur Windows 2008 OCSP, et une erreur étrange se produit lorsque j'essaie de lire la signature du répondeur. cert.Exception lors de la lecture des cerceaux de signature OCSP en Java

Je reçois l'exception suivante en essayant d'effectuer une validation OCSP.

Caused by: java.security.cert.CertificateParsingException: java.io.IOException: short read on DerValue buffer 
    at sun.security.x509.X509CertInfo.<init>(Unknown Source) 
    at sun.security.x509.X509CertImpl.parse(Unknown Source) 
    at sun.security.x509.X509CertImpl.<init>(Unknown Source) 
    at sun.security.provider.certpath.OCSPResponse.<init>(Unknown Source) 
    at sun.security.provider.certpath.OCSPChecker.check(Unknown Source) 
    ... 6 more 
Caused by: java.io.IOException: short read on DerValue buffer 
    at sun.security.util.DerValue.getOctetString(Unknown Source) 
    at sun.security.x509.Extension.<init>(Unknown Source) 
    at sun.security.x509.CertificateExtensions.init(Unknown Source) 
    at sun.security.x509.CertificateExtensions.<init>(Unknown Source) 
    at sun.security.x509.X509CertInfo.parse(Unknown Source) 
    ... 11 more 

Cela donnait à penser qu'il y avait un problème de lecture du cert signature, j'ai donc essayé d'importer que séparément en utilisant une méthode similaire à celle ci-dessous:

public static List<Certificate> readCerts(String certFile, 
     CertificateFactory cf, boolean withCRL) throws Exception { 
    FileInputStream fis = new FileInputStream(certFile); 
    BufferedInputStream bis = new BufferedInputStream(fis); 

    List<Certificate> certs = new LinkedList<Certificate>(); 

    while (bis.available() > 0) { 
     Certificate cert = cf 
       .generateCertificate(bis); 
     X509Certificate cx509 = (X509Certificate) cert; 
     certs.add(cert); 
    } 

    return certs; 
} 

qui m'a donné la même erreur. Cela semble se produire uniquement avec les certificats générés à partir du modèle de signature OCSP, les certificats d'utilisateur peuvent être lus correctement.

Est-ce que quelqu'un d'autre a rencontré des problèmes similaires avec le support X509 en Java?

Cordialement, Tom

MISE À JOUR: Le Cert Je vais avoir des problèmes avec est comme ci-dessous:

-----BEGIN CERTIFICATE----- 
MIIDzDCCArSgAwIBAgIKYQWrDAAAAAAABjANBgkqhkiG9w0BAQUFADBFMRMwEQYK 
CZImiZPyLGQBGRYDaW50MRUwEwYKCZImiZPyLGQBGRYFbG9ucWExFzAVBgNVBAMT 
DmxvbnFhLVRFLUNBLUNBMB4XDTA5MDkyMTE2NDIxNloXDTA5MTAwNTE2NDIxNlow 
GjEYMBYGA1UEAxMPdGUtY2EubG9ucWEuaW50MIIBIjANBgkqhkiG9w0BAQEFAAOC 
AQ8AMIIBCgKCAQEA6rYO7X/PztBE2Do9u95ws3Ob86cySJ1iLrHLSF+VjvTQkZ3J 
e0uKxoK4doSikqCZH9zXZ6qFFVMZlzq/FnIP9TLhv3uFom0y+Z0HmPAW7RtrZ8R6 
1EAmcQDGpyRhzCWJqrEzgbW1v1QtF854kium97GwUWnVijGv3jQqT3hbmD7++9lh 
9ILaLXMAKdTFpL1ao2eHWYf2mChRpuAox2juO1g4xjot9GXsEMhTwAg9F/pZnbKE 
hhpeo1c0kgP3uus7ULlwdRnZ4O+tp79GeVKsdJbphmnC6Fc/PdT0KuHSk9Q0v192 
Ger5nTQaZk/dmsyGBd8g4Q+0g0Ri+wgpUUsykQIDAQABo4HoMIHlMDYGCSsGAQQB 
gjcVBwQpMCcGHysGAQQBgjcVCIHPgWyXxQ2ChYcyg8LhMoWky3ppASACAWUCAQAw 
EwYDVR0lBAwwCgYIKwYBBQUHAwkwDgYDVR0PAQH/BAQDAgeAMBsGCSsGAQQBgjcV 
CgQOMAwwCgYIKwYBBQUHAwkwDQYJKwYBBQUHMAEFBAAwHQYDVR0OBBYEFNblspp7 
Hu07mraeMSyuBUTUnbl3MB8GA1UdIwQYMBaAFK/r521FB+GNls/fe8hrNE8UpQhv 
MBoGA1UdEQQTMBGCD3RlLWNhLmxvbnFhLmludDANBgkqhkiG9w0BAQUFAAOCAQEA 
FASEVcUJQlrmCD/ysycOxAIAoc2BVLhteOMoZ7V65a5/+Q5JM7Od+gKqoxLVrjb2 
BDLlDFp5U8CirQ4lyWV5i1gQpLFTDcjgonp9Ky50KA0Ginn5CmTELB2THwFSQwfm 
OFenSaV1mAcEzdyp/hi2xSuMqhveSanQFD0r6y45oZsd9ubdFEWI6nBRrj4hhfw0 
Wo2GKUgslXqAqEezdin5JNgsPdj3qsi4+U4llyrd3gG20eoWzGHF4h7wfFiQV+fs 
yEPY06Rg9G9m3GlIv+7Gp3sixb+cvZe+e0gO32mVRydTXMaAZu7ZiFk3M6AqxfDw 
dO//eCu2dZCLTw6xTbUc9A== 
-----END CERTIFICATE----- 
+0

Merci pour les réponses rapides, les gars. J'ai ajouté le problème cert à la description. –

+0

Voir mes modifications ....................... –

Répondre

3

Je suppose que vous obtenez votre usine comme ça,

cf = CertificateFactory.getInstance("X509"); 

Le L'usine X509 par défaut a de nombreuses limitations. Il semble que votre certificat contienne une extension que l'usine ne sait pas analyser. Si vous publiez le certificat, je peux vous aider à identifier l'extension incriminée.

EDIT: L'extension incriminée est

1.3.6.1.5.5.7.48.1.5 - id-pkix-OCSP-nocheck

La seule option est de supprimer de la cert avec Java intégré JCE. Vous pouvez également essayer un autre JCE comme BouncyCastle.

+0

Merci, j'ai déménagé pour essayer le fournisseur BouncyCastle et cela semble fonctionner. –

+0

pouvez-vous nous donner un exemple de code pour BouncyCastle. – Poornan