Pues sí, la verdad es que es un poco delicado confiar en esa extensión, 
pero el OCSPChecker de CryptoApplet genera el CertificateID basándose en 
ella, por eso no entendía el motivo. De todas maneras, de la segunda 
manera que puse en el mail anterior funciona correctamente y sin 
necesidad de depender directamente de esa determinada extensión.

Un saludo!!

José Luís Vaquero escribió:
> Puede que no tenga esa extension pq no sea un certificado v3. Tambien 
> puede que aunque sea v3 como esa es una seccion no critica no tenga 
> esa extension.
>
> No estoy seguro de que hace exactamente cryptoapplet pero esa 
> extension esta puesta para recorrer facilmente el arbol de autoridades 
> y no es obligatoria, asi que confiar en ella es un poco delicado. En 
> el rfc explican como hay que actuar segun se encuentran secciones 
> criticas y no criticas y si el programa sabe tratarlas o no.
>
> El 1 de septiembre de 2010 11:21, Rafael Ruiz Palacios 
> <[email protected] <mailto:[email protected]>> escribió:
>
>     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 <http://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] <mailto:[email protected]>
>     Telf/Phone -Fax.: (+34) 902 995 246
>     www.yerbabuena.es <http://www.yerbabuena.es>
>     [email protected] <mailto:[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] <mailto:[email protected]>
>     http://llistes.uji.es/mailman/listinfo/cryptoapplet
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> CryptoApplet mailing list
> [email protected]
> http://llistes.uji.es/mailman/listinfo/cryptoapplet
>   


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