Validación mediante @Firma 6 y DSS

@firma es una plataforma de validación y firma electrónica multi-PKI promovida por el gobierno español, que se pone a disposición de las Administraciones Públicas, proporcionando servicios para implementar la validación de certificados y firma electrónica avanzada. Para ello, ofrece una capa de servicios web que ofrecen múltiples funcionalidades. En el caso que nos ocupa se accederá a la validación de certificados. Puede consultar la documentación completa de @Firma en la Zona Segura de la web de la ACCV.

Oasis DSS son protocolos basados en XML que definen una capa de servicios web para la validación de firmas y certificados digitales.

Las peticiones a los servicios web de @Firma 6 serán de 3 tipos en función de la aplicación que realice las mismas:

  • Sin securizar.
  • Securizadas haciendo uso de usuario y contraseña.
  • Firmadas.

En cualquiera de los casos si una aplicación quiere hacer uso de los servicios web de @Firma requiere de un identificador que se asigna desde la plataforma. Para obtener un identificador de aplicación deben ponerse en contacto con la ACCV.

A continuación se ofrece el ejemplo que se vio en el apartado de validación de certificados completado con la creación de un objeto para validar certificados desde la plataforma de @Firma 6.

Certificate certificado = ...

CertificateValidationService servicio1 = new AFirma6CertificateValidationService(
  "afirma6.accv.es:8444", "ACCVTEST.MIAPLICACION", null, null, null);
List<CertificateValidationService> lServicios = new ArrayList<CertificateValidationService>();
lServicios.add(servicio1);

CertificateValidationServiceResult resultadoValidacion = certificado.validate(lServicios);
if (resultadoValidacion.getResult() != ValidationResult.RESULT_VALID) {
        throw new Exception("El certificado no es válido: " + resultadoValidacion);
}

En este caso se accede a la plataforma de explotación con el ID de aplicacion 'ACCVTEST.MIAPLICACION' y se accede mediante una llamada sin securizar.

Si hubiera que utilizar usuario y contraseña la creación del objeto quedaría así:

CertificateValidationService servicio1 = new AFirma6CertificateValidationService(
  "afirma6.accv.es:8444", "ACCVTEST.MIAPLICACION", "miUsuario", "miContraseña", null);

Si la seguridad se establece mediante la firma de las llamadas se indicará la ubicación de un fichero de propiedades WSS4J que contenga la información que permita la firma.

CertificateValidationService servicio1 = new AFirma6CertificateValidationService(
  "afirma6.accv.es:8444", "ACCVTEST.MIAPLICACION", null, null, "outsecurity_sign.properties");

En el enlace WSS4J puede ver cómo rellenar este fichero. Éste sería un ejemplo:

org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=pkcs12
org.apache.ws.security.crypto.merlin.keystore.password=miKSPassword
org.apache.ws.security.crypto.merlin.alias.password=miKSPassword
org.apache.ws.security.crypto.merlin.keystore.alias=miKSAlias
org.apache.ws.security.crypto.merlin.file=/root/keystores/miKeystoreFirma.p12