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