Este ejemplo tiene como objetivo validar el estado de un certificado mediante el servicio de validación de TrustedX. A continuación se describen los pasos a seguir para crear una petición de validación.

Para poder probar este ejemplo se debe descargar el archivo sampleSW1.zip y seguir las instrucciones que se encuentran en Configuración del entorno. El archivo descargado contiene el código de ejemplo y los archivos necesarios, en este caso el certificado a validar.

En primer lugar en el ejemplo se definen las constantes necesarias. En la API usada se integra una clase con definiciones públicas de constantes internas que pueden ser referenciadas libremente. Las constantes que se deben definir para el ejemplo incluyen el lugar dónde se encuentra el certificado a validar, los parámetros de autenticación y la dirección dónde se encuentra la plataforma TrustedX a la que se invocaran los servicios.

private static final String path_in = "data/input/";
private static final String filename = "dave.crt";
private static final String user = "dave";
private static final String password = "trustedx";
private static final String host = "https://labs.safelayer.com/demo/services/SignatureVerify";

Para realizar una petición de validación de certificado se debe crear un objeto SmartVerifyRequest que contendrá la petición al host destino.

SmartVerifyRequest svr = new SmartVerifyRequest(host);

También es necesario incluir las credenciales de autenticación, en este caso mediante nombre de usuario y contraseña en claro. En todos los ejemplos se utiliza está forma de autenticación.

SmartHeader sh = new SmartHeader();
sh.setUsername(user);
sh.setPassword(password);
svr.setHeader(sh);

Se debe definir el perfil que se va a usar dentro del servicio de validación de TrustedX, en este caso certstatus.

svr.setProfile(Constants.Profile.CERTSTATUS);

Finalmente se añaden los datos del certificado a validar en Base64, indicando que se trata de un certificado firmado. En estas instrucciones se utiliza la clase Util que implementa funciones para leer el contenido de los distintos archivos necesarios.

svr.setSignatureBase64(Util.readBinaryFileB64(path_in + filename));
svr.setSignatureBase64Type(Constants.SignatureType.CERTIFICATE);

Una vez se han introducido todos los datos en la petición se invoca la método send() que envía la petición al host y recoge la respuesta en un objeto SmartVerifyResponse.

SmartVerifyResponse svrs = svr.send();

A continuación se puede comprobar si la petición se ha enviado correctamente consultando los parámetros de la respuesta. Para ello usaremos las funciones de la clase auxiliar UtilTrustedX.

if (UtilTrustedX.checkSW(svrs.getResultMajor(), svrs.getResultMinor(), svrs.getResultMessage())) {
UtilTrustedX.printResponse(svrs);
for (int other = 0; other < svrs.getNumberVerifyResponses(); other++) {
UtilTrustedX.printResponse(svrs.getOtherResponse(other));
}
}

Finalmente después de probar este código se obtendrá el resultado de la ejecución, en particular se consultan los valores de los atributos ResultMajor y ResultMinor que indican si la petición se ha procesado correctamente mediante los valores Success y ValidSignature_OnAllDocuments para este ejemplo en particular.

** RESPONSE **
---------------------
Signature num 0
---------------------
** Certificate **
Major: urn:oasis:names:tc:dss:1.0:resultmajor:Success
Minor: urn:oasis:names:tc:dss:1.0:resultminor:ValidSignature_OnAllDocuments
DN: CN=Dave, OU=Demo, O=TrustedX, C=ES
Issuer Trust Level: 0
Issuer Trust Label: Administration

Además, existe la posibilidad de que una respuesta de validación de certificados retorne otros valores de información opcionales. Algunos de ellos, se añaden debido a que han sido seleccionados previamente, en la política de firma utilizada en la propia consola de administración del producto TrustedX. Otros en cambio, son esperados en una respuesta si se han pedido explícitamente en la petición correspondiente.

En este caso se obtiene información sobre el firmante y el nivel de confianza del mismo.

Para pedir información adicional se pueden usar métodos como setAddCertificateValues() o setAddRevocationValues(), indicando en que formato se quieren recuperar estos valores.