Establece las interfaces necesarias para la manipulación de estados de certificados y su acceso/almacenamiento.
Establece los interfaces y clases base para gestionar estados de certificados. Este módulo se divide en dos secciones principales:
La implementación de recuperadores de elementos de estado de certificados debe realizarse implementando el interfaz {@link es.mityc.javasign.certificate.IRecoverElements}. Mediante este interfaz se indica al recuperador identificadores del elemento buscado y la clase esperada como respuesta. Los errores esperados de recuperador son:
public class ExampleRecoverOCSPElement {
(...)
public void method() {
// Instanciación o recuperación de recoverer
IRecoverElements recoverManager = (...);
Map props = new HashMap();
props.put(IRecoverElements.PROP_EMISSION_DATE, (... Date con la fecha de emisión de la respuesta OCSP buscada ...));
props.put(IRecoverElements.PROP_DIGEST_ALGORITHM, (... String con el algoritmo de hash de la respuesta OCSP buscada...));
props.put(IRecoverElements.PROP_DIGEST_VALUE, (... byte[] con el hash de la respuesta OCSP buscada ...));
props.put(IRecoverElements.PROP_ISSUER_NAME, (... X500Princial con el nombre del emisor de la respuesta OCSP buscada ...));
IOCSPCertStatus ocsp = null;
try {
ocsp = recoverManager.getElement(props, IOCSPCertStatus.class);
} catch (ElementNotFoundException ex) {
(... no se ha podido encontrar el elemento indicado ...)
} catch (UnknownElementClassException ex) {
(... no se reconoce el tipo de dato al que debe ajustarse la respuesta ...)
}
(...)
}
(...)
}
Si se implementa un consultar de estados de certificados se debe seguir las siguientes normas:
Para facilitar la labor de implementación se provee de una clase abstracta que puede servir de base de la clase que indica el tipo de estado: {@link es.mityc.javasign.certificate.AbstractCertStatus}.
public class ExampleCertStatus {
(...)
public void method(X509Certificate certificate) {
// Instanciación o recuperación de recoverer
ICertStatusRecoverer recoverer = (...);
try {
List results = recoverer.getCertStatus(certificate);
// El primer resultado es el del certificado consultado. En una comprobación debería tenerse en cuenta
// el estado de todos los certificados de la cadena.
ICertStatus certStatus = results.get(0);
switch(certStatus.getStatus()) {
case valid:
System.out.println("El certificado es válido");
break;
case revoked:
System.out.println("El certificado está revocado");
System.out.println("Fecha de revocación: " + certStatus.getRevokedInfo().getRevokedDate());
break;
default:
System.out.println("Se desconoce el estado del certificado. Pruebe con otro validador.");
}
} catch (CertStatusException ex) {
(... no se ha podido consultar el estado ...)
}
(...)
}
(...)
}