Ir al contenido

Ejemplo Java/Eclipse

Guía de integración con el IDE Eclipse

Eclipse es un IDE para Linux y Windows que se utiliza para desarrollar código Java.

La versión utilizada en la integración fue la 4.20.0. Las versiones superiores a la 8 en adelante pueden utilizarse para esta guía, aunque la versión 8 o anterior presenta algunas diferencias debido a un cambio en Java a partir de la versión 9.

Configuración del entorno

  1. Instale el cliente HSM en su entorno.

  2. Instalación en Windows

  3. Instalación de Linux

  4. Configurar las variables de entorno básicas. Esto puede hacerse editando las variables directamente o a través de DINAMOcon.

  5. DFENCE_PKCS11_IP: IP del HSM

  6. DFENCE_PKCS11_USER: Nombre de usuario HSM

Si desea utilizar varios usuarios en la aplicación, debe activar la variable:

Para más información, consulte la sección de configuración.

Las aplicaciones Java que hacen uso de PKCS#11 necesitan utilizar algunas bibliotecas HSM; todas ellas se encuentran en la carpeta de instalación. El nombre del archivo es tacndp11.dll (Windows) o libtacndp11.so (Linux).

Ejemplos:

  • Instalación 64-bis:
  • Versión de 64 bits: C:Archivos de programaDinamo Networks\HSM Dinamo\sdk\c\tacndp11.dll
  • Versión de 32 bits: C:Archivos de programaDinamo Networks\HSM Dinamo\sdk\32-bit\tacndp11.dll
  • Instalación de 32 bits:
  • C:Archivos de programaDinamo Networks\HSM Dinamo\sdk\c\tacndp11.dll

En Linux, la biblioteca PKCS#11 estará en la carpeta de bibliotecas del sistema.

Ejemplos:

  • CentOS/Red Hat 64 bits:
  • /usr/lib64/libtacndp11.so

  • Ubuntu/Debian 32 bits/64 bits y CentOS/Red Hat 32 bits:

  • /usr/lib/libtacndp11.so

Configurar un proyecto en Eclipse

Para configurar el proyecto es necesario añadir el archivo tacndjavalib.jar a ruta de construcción. La biblioteca ndjac.jar sólo debe añadirse si utiliza JCA.

Pantalla de configuración _build path_ en Eclipse

Pantalla de configuración _build path_ en Eclipse

Código de ejemplo (Java 9+)

La diferencia entre java 9+ y java 8 es simplemente cómo se importan las librerías y cómo se crea el objeto proveedor.

El siguiente código crea el proveedor con la librería Dinamo, carga el almacén de claves del usuario maestro utilizando el método de contraseña especial con la variable de entorno DFENCE_PKCS11_SPECIAL_PWD habilitada, y luego lista el nombre y contenido de los certificados en la partición del usuario.

El resultado del ejemplo es más interesante si hay certificados en la partición.

El expediente p11config.cfg debe tener al menos los siguientes campos nombre e biblioteca. Ejemplos a continuación:

nombre = dinamo
biblioteca = C:Archivos de programaDinamo Redes Dinamo\sdk\c\tacndp11.dll

nombre = dinamo
biblioteca = /usr/lib/libtacndp11.so
o

nombre = dinamo
biblioteca = /usr/lib64/libtacndp11.so

La documentación PKCS#11 de Oracle puede encontrarse aquí.

import java.io.IOException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.Provider;
import java.security.Security;
import java.security.cert.CertificateException;
import java.util.Enumeration;

public class pkcs11 {
    public static void main(String[] args) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException {
        String pkcs11Config = "/usr/app/p11config.cfg";
        Provider p = Security.getProvider("SunPKCS11");
        p = p.configure(pkcs11Config);
        java.security.Security.addProvider(p);

        /////
        //
        // Nota: substitua a string de pin usando o formato:
        //
        // usuario:senha@ip
        //
        /////

        String pin = "master:12345678@192.168.1.101";
        java.security.KeyStore keyStore = java.security.KeyStore.getInstance("PKCS11");
        keyStore.load(null, pin.toCharArray());

        Enumeration<String> enumeration = keyStore.aliases();
        while(enumeration.hasMoreElements()) {
            String alias = enumeration.nextElement();
            System.out.println("alias name: " + alias);
            java.security.cert.Certificate certificate = keyStore.getCertificate(alias);
            System.out.println(certificate.toString());
            }
    }
}

Para configurar el proveedor en java 8 el código es el siguiente:

Proveedor proveedorPKCS11 = nuevo sol.security.pkcs11.SunPKCS11(pkcs11Config);
java.seguridad.Seguridad.addProvider(providerPKCS11);