Otros prestadores de certificación

Si va a trabajar con certificados distintos a los de la Agencia de Tecnología y Certificación Electrónica y el DNIe ya no podrá hacer uso de la librería Arangí, debiendo utilizar las herramientas proporcionadas por la librería Arangí Base.

Sellos de tiempo

Una de las posibles diferencias entre los métodos de Arangí y los de Arangí Base para las mismas clases es que en los segundos hay ocasiones en las que hay que pasar como parámetro la URL de un Servidor de Sello de Tiempos (TSA). Si se desea utilizar la TSA de la ACCV basta con pasar su URL. Por ejemplo, para completar una firma XAdES-BES a XAdES-T:

URL urlTSA = new URL ("http://tss.accv.es:8318/tsa");
XAdESTSignature xAdESTSignature = XAdESTSignature.completeToXAdEST(xAdESBESSignature, validationServices, urlTSA);

Almacenes de claves y alias

Cuando se realiza una firma es necesario indicar el almacén de claves donde se guarda la clave privada del certificado (tarjeta, JKS, etc), pero tambien hace falta conocer el lugar dentro del almacén donde ésta se encuentra, ese nombre dentro del almacén es el alias. En la Agencia de Tecnología y Certificación Electrónica los certificados se suelen almacenar con nombres predefinidos, por lo que los métodos de la librería Arangí no requieren que se les indique un alias. Con certificados de otros prestadores si será necesario indicar el alias de la clave privada. Existen métodos para poder obtener todos los alias. A continuación se muestra un ejemplo de firma con el primer alias de un almacén de claves.

 DeviceManager manager = ...;
 String alias = manager.getAliasNamesList()[0];
 XAdESBESSignature signature = XAdESBESSignature.sign(manager, alias, new File("a firmar.txt"));

Lista de certificados de Autoridades de Certificación (CAList)

La validación de un certificado implica la validación de toda su cadena de confianza, por ello Arangí Base necesita disponer de toda la cadena para poder validar. Lo mismo se podría decir de las firmas longevas o las compleciones a firmas longevas, ya que el principio básico de una firma longeva es que guarde la información de validación del certificado firmante y de toda su cadena de certificación.

La validación de certificados y firmas se puede llevar a cabo mediante @Firma (la explicación se encuentra dentro del apartado 'Certificados'). Otra forma de validar, y que además también sirve para realizar y completar a firmas longevas, es mediante una lista de certificados de Autoridades de Certificación: clase es.accv.arangi.base.certificate.validation.CAList.

La creación de un objeto CAList es bastante simple: se puede inicializar pasándole un directorio donde se encuentran los certificados de las CAs, una lista con todos los certificados o usar el constructor por defecto y luego ir añadiendo los certificados de las CAs uno a uno con el método 'addCACertificate'.

        CAList caList = new CAList(new File ("carpeta_cas"));
        
        List<X509Certificate> lCertificatesCA = new ArrayList<X509Certificate>();
        lCertificatesCA.add(Util.getCertificate(new File ("ca1.cer")));
        ...
        caList = new CAList(lCertificatesCA);
        
        caList = new CAList();
        caList.addCACertificate (Util.getCertificate(new File ("ca1.cer")));
        ...

Arangí Base obtiene las URLs de los servicios de validación de cada Autoridad de Certificación directamente de ciertos campos de los certificados:

  • URL al OCSP: se encuentra en el campo Acceso a la Información de la Autoridad (AIA).
  • URL a la CRL: se encuentra en el campo Puntos de Distribución de la CRL.

Por desgracia no siempre se pueden obtener estas URLs, bien porque algunas Autoridades de Certificación no incluyen estos campos o hacen que apunten a lugares inaccesibles. Para que Arangí Base pueda trabajar con estos certificados se creó un fichero que asocia URLs de OCSP y CRL por Autoridad de Certificación. Dicho fichero se puede pasar a la CAList mediante el método 'setValidationXML' o bien puede estar en la carpeta con la que se llama al constructor con el nombre 'validation_data.xml'.

En el fichero básicamente se trata de asociar el Common Name del emisor de los certificados con una lista de URLs de OCSP que servirán para validar dichos certificados. A continuación se muestra el fichero validation_data.xml que se utiliza para poder validar los certificados del DNIe:

<?xml version="1.0" encoding="UTF-8"?>
<validation-data>
        <ca common-name="AC DNIE 001">
                <ocsps>
                        <ocsp>
                                <url>http://ocsp.dnie.es</url>
                        </ocsp>
                        <ocsp>
                                <url>http://afirma.redinteradministrativa.es/servidorOcsp/servidorOCSP</url>
                        </ocsp>
                </ocsps>
        </ca>
        <ca common-name="AC DNIE 002">
                <ocsps>
                        <ocsp>
                                <url>http://ocsp.dnie.es</url>
                        </ocsp>
                        <ocsp>
                                <url>http://afirma.redinteradministrativa.es/servidorOcsp/servidorOCSP</url>
                        </ocsp>
                </ocsps>
        </ca>
        <ca common-name="AC DNIE 003">
                <ocsps>
                        <ocsp>
                                <url>http://ocsp.dnie.es</url>
                        </ocsp>
                        <ocsp>
                                <url>http://afirma.redinteradministrativa.es/servidorOcsp/servidorOCSP</url>
                        </ocsp>
                </ocsps>
        </ca>
        <ca common-name="AC RAIZ DNIE">
                <ocsps>
                        <ocsp>
                                <url>http://ocsp.dnie.es</url>
                        </ocsp>
                        <ocsp>
                                <url>http://afirma.redinteradministrativa.es/servidorOcsp/servidorOCSP</url>
                                <requestor_name>gv.accv</requestor_name>
                        </ocsp>
                </ocsps>
        </ca>
</validation-data>