Ir al contenido

Ejemplo de Eclipse

Integración con 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 del HSM; están todos 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: Dinamo Networks DinamoC:Archivos de programa \HSM \sdk\c\tacndp11.dll
    • Versión de 32 bits: Dinamo Networks DinamoC:Archivos de programa \HSM \sdk\32-bit\tacndp11.dll
  • Instalación de 32 bits:

    • Dinamo Networks DinamoC:Archivos de programa \HSM \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

Crear un proyecto

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.

DinamoEl siguiente código crea el proveedor con la librería, carga elalmacén de claves del usuario utilizando el método master 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:

name = dinamo
library = C:\Program Files\Dinamo Networks\HSM Dinamo\sdk\c\tacndp11.dll

name = dinamo
library = /usr/lib/libtacndp11.so
o

name = dinamo
library = /usr/lib64/libtacndp11.so

Nota

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:

Provider providerPKCS11 = new sun.security.pkcs11.SunPKCS11(pkcs11Config);
java.security.Security.addProvider(providerPKCS11);