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
