2009-09-30 4 views
1

현재 Windows 2008 OCSP 응답자와 통신하기 위해 Java 응용 프로그램 (JRE 1.5 이상)을 얻으려고하고 있으며 응답자의 서명을 읽는 중 이상한 오류가 나타납니다. 증명.Java에서 OCSP 서명 인증서를 읽을 때 예외가 발생했습니다.

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 

는 서명 인증서를 읽는 데 문제가 있었다 제안, 그래서 나는 다음과 같은 방법을 사용하여 따로 가져 오기를 시도 : 나에게 같은 오류를 준

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; 
} 

합니다. 이것은 OCSP 서명 템플릿에서 생성 된 인증서로만 발생하며 사용자 인증서는 잘 읽힐 수 있습니다.

다른 사람이 Java에서 X509 지원과 비슷한 문제가 발생 했습니까?

감사합니다, 톰

업데이트 :에 문제가 해요 인증서는 다음과 같습니다 :

-----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

빠른 응답 주셔서 감사합니다. 설명에 문제 인증서를 추가했습니다. –

+0

제 편집보기 ....................... –

답변

3

난 당신이처럼 공장을 얻을 가정,

cf = CertificateFactory.getInstance("X509"); 

기본 X509 팩토리에는 많은 제한이 있습니다. 인증서에 파싱하는 방법을 알지 못하는 확장 프로그램이 인증서에있는 것 같습니다. 인증서를 게시하면 문제의 확장 프로그램을 식별 할 수 있도록 도와 줄 수 있습니다.

편집 : 기분을 상하게하는 확장

입니다

1.3.6.1.5.5.7.48.1.5 - ID-PKIX-OCSP - NOCHECK 유일한 옵션이 내장 된 자바와 인증서에서이를 제거하는 것입니다

JCE. BouncyCastle과 같은 다른 JCE를 시도 할 수도 있습니다.

+0

감사합니다. BouncyCastle 공급자를 사용해 보았습니다. 정상적으로 작동하는 것 같습니다. –

+0

BouncyCastle에 대한 코드 샘플을 제공 할 수 있습니까? – Poornan