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]> 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 = 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 >
_______________________________________________ CryptoApplet mailing list [email protected] http://llistes.uji.es/mailman/listinfo/cryptoapplet
