Dispositivos PKCS#11

La clase para tratar este tipo de dispositivo es: es.accv.arangi.device.Pkcs11Manager.

Los dispositivos PKCS#11 son las distintas tarjetas criptográficas usadas por Arangí. Para la inicialización de dispositivos PKCS#11 sólo es necesario pasar el PIN para abrir el dispositivo. Arangí se encargará de buscar en el sistema los drivers adecuados para trabajar con la tarjeta. Si esos drivers no están instalados se producirá una excepción.

Pkcs11Manager manager = new Pkcs11Manager ("12345678");

Arangí permite trabajar con varios lectores de tarjetas. Para conocer qué tarjetas se hallan conectadas se utiliza el método estático getConnectedDevices de Pkcs11Manager. Cada elemento de la lista obtenida es un Pkcs11Device que puede ser utilizado para construir un Pkcs11Manager.

List lDispositivos = Pkcs11Manager.getConnectedDevices();
for (Iterator iterator = lDispositivos.iterator(); iterator.hasNext();) {
        Pkcs11Device device = (Pkcs11Device) iterator.next();
        Pkcs11Manager manager = new Pkcs11Manager (device, pins[i]);
        i++;
}

Una tarjeta puede ser abierta con su PIN o con su PUK. Los métodos utilizados en uno u otro caso son diferentes. En general, una tarjeta sólo se abre con el PUK para desbloquearla.

Pkcs11Manager manager = new Pkcs11Manager ("87654321", true); // abrir con PUK
manager.unlockPIN ("11111111"); // desbloquear, el nuevo PIN es "11111111"

Es muy importante cerrar los managers PKCS#11 una vez se haya acabado con ellos. Si no se hace así las sesiones se quedan abiertas y la tarjeta puede llegar a no admitir más acciones. Es recomendable cerrar tras realizar una acción o un grupo de acciones atómico.

Pkcs11Manager manager = null;
CMSSignature signature;
try {
        manager = new Pkcs11Manager ("12345678");
        FileDocument document = new FileDocument (new File ("c:/temp/a_firmar.txt"));
        signature = CMSSignature.sign(new Pkcs11Manager[] { manager }, document);
} finally {
        if (manager != null) {
                manager.close();
        }
}