Muy buenas a todos!

Mi pregunta es más bien por curiosidad, pero me gustaría saber si es 
necesario por algún motivo esta diferencia.

El caso es que en la clase OCSPChecker en el método 
generateCertificateID, para obtener el CertificateID usáis el "extensio 
value 2.5.29.14 (Subject Key Identifier)", sin embargo en la propia 
clase CertificateID para generar el CertificateID, lo hacen de otra 
manera. Copio las dos para que veáis la diferencia y si es por algún 
motivo en particular.

OCSPChequer:

private CertificateID generateCertificateID(X509Certificate certificate,
            X509Certificate caCertificate, Provider provider) throws 
CryptoCoreOCSPException
    {
        CertificateID certificateID = null;

        try
        {
            X509Principal issuerName = 
PrincipalUtil.getSubjectX509Principal(caCertificate);           

            MessageDigest digest = 
MessageDigest.getInstance("1.3.14.3.2.26", provider);
            digest.update(issuerName.getEncoded());

            ASN1OctetString issuerNameHash = new 
BERConstructedOctetString(digest.digest());

            *byte[] arr = caCertificate.getExtensionValue("2.5.29.14");
            byte[] arr2 = new byte[arr.length - 4];
            System.arraycopy(arr, 4, arr2, 0, arr2.length);
            ASN1OctetString issuerKeyHash = new 
BERConstructedOctetString(arr2);

            CertID cerid = new CertID(new 
AlgorithmIdentifier("1.3.14.3.2.26"), issuerNameHash,
                    issuerKeyHash, new 
DERInteger(certificate.getSerialNumber()));

            certificateID = new CertificateID(cerid);      *
        }
        catch (CertificateEncodingException cee)
        {
            throw new CryptoCoreOCSPException(
                    "Can not generate a valid certificate ID. CA 
certificate encoding is not valid",
                    cee);
        }
        catch (NoSuchAlgorithmException nsae)
        {
            throw new CryptoCoreOCSPException(
                    "Can not generate a valid certificate ID. Can not 
generate an instance of SHA-1 algorithm",
                    nsae);
        }

        return certificateID;
    }

CertificateID:

public CertificateID(
        String          hashAlgorithm,
        X509Certificate issuerCert,
        BigInteger      number,
        String          provider)
        throws OCSPException
    {
        try
        {
            MessageDigest       digest = 
MessageDigest.getInstance(hashAlgorithm, provider);
            AlgorithmIdentifier hashAlg = new AlgorithmIdentifier(
                                        new 
DERObjectIdentifier(hashAlgorithm), new DERNull());

            X509Principal issuerName = 
PrincipalUtil.getSubjectX509Principal(issuerCert);

            digest.update(issuerName.getEncoded());

            ASN1OctetString issuerNameHash = new 
DEROctetString(digest.digest());
            *PublicKey issuerKey = issuerCert.getPublicKey();


            ASN1InputStream aIn = new 
ASN1InputStream(issuerKey.getEncoded());
            SubjectPublicKeyInfo info = SubjectPublicKeyInfo.getInstance(
                                                            
aIn.readObject());

            digest.update(info.getPublicKeyData().getBytes());

            ASN1OctetString issuerKeyHash = new 
DEROctetString(digest.digest());

            DERInteger serialNumber = new DERInteger(number);

            this.id = new CertID(hashAlg, issuerNameHash,
                                            issuerKeyHash, serialNumber);*
        }
        catch (Exception e)
        {
            throw new OCSPException("problem creating ID: " + e, e);
        }
    }

El problema es que he topado con un certificado de autoridad que no 
tenía ese determinado "extension value" (tampoco sé el motivo), así que 
claro, me estaba lanzando una NullPointerException, así que he tenido 
que modificar el OCSPChecker para que genere el CertificateID de la otra 
forma.

¿Existe alguna diferencia? ¿Es importante hacerlo de una manera u otra?

Muchas gracias por adelantado, como siempre!!

Saludos!!!

-- 
YERBABUENA SOFTWARE
Rafael Ruiz Palacios
Dpto. I+D+i
[email protected]
Telf/Phone -Fax.: (+34) 902 995 246
www.yerbabuena.es
[email protected]


En cumplimiento de la Ley Orgánica 15/1999 de 13 de Diciembre, de Protección de 
Datos de Carácter Personal, de YSENGINEERS, S.C.A., como Responsable 
delFichero, pone en su conocimiento que los datos incluidos en este mensaje 
están dirigidos al destinatario o destinatarios designados, por lo que si lo ha 
recibido por error, le rogamos nos lo haga saber a la mayor brevedad posible, y 
elimine el original, no estando permitido hacer ningún uso del mensaje. Ponemos 
en su conocimiento la posibilidad de ejercer sus derechos de 
acceso,rectificación, cancelación y oposición, en los términos establecidos en 
la legislación vigente, que podrá hacer efectivos dirigiéndose por escrito a de 
YSENGINEERS, S.C.A., en la dirección: C/ Severo Ochoa, num. 4, Parque 
Tecnológico de Andalucía, 29590, Málaga.

_______________________________________________
CryptoApplet mailing list
[email protected]
http://llistes.uji.es/mailman/listinfo/cryptoapplet

Responder a