Pergunta

Atualmente estou trabalhando para conseguir uma aplicação Java (JRE 1.5 ou superior) para falar com um OCSP Responder Windows 2008, e eu estou recebendo um erro estranho em tentar ler cert assinatura do Respondedor.

Eu recebo a seguinte exceção na tentativa de executar uma validação 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

Este sugeriu que havia um problema na leitura do cert assinatura, então eu tentei importar que separadamente usando um método semelhante ao abaixo:

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

que me deu o mesmo erro. Isso só parece acontecer com certificados gerados a partir do modelo OCSP assinatura, certificados de usuário pode ser lido bem.

Tem mais alguém encontrou problemas semelhantes com o apoio X509 em Java?

Saudações, Tom

UPDATE: O cert eu estou tendo problemas com é como abaixo:

-----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-----
Foi útil?

Solução

Eu suponho que você obter sua fábrica como esta,

  cf = CertificateFactory.getInstance("X509");

A fábrica X509 padrão tem muitas limitações. Parece que o seu cert contém uma extensão da fábrica não sabe como analisar. Se você postar o cert, posso ajudá-lo a identificar a extensão ofensivo.

EDIT: A extensão agressor é

1.3.6.1.5.5.7.48.1.5 - id-pkix-OCSP-nocheck

A única opção é para remover esta do cert com Java embutido JCE. Você também pode tentar outra JCE como BouncyCastle.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top