Exemplo Eclipse
Integração com Eclipse
O Eclipse é uma IDE para Linux e Windows usada para desenvolver código java.
A versão utilizada na integração foi 4.20.0. A versões acima da 8 em diante podem ser utilizadas para esse guia, sendo que a versão 8 ou anteriores tem algumas diferenças devido a uma mudança no Java a partir da versão 9.
Configuração do Ambiente
-
Instalar o cliente do HSM no seu ambiente.
-
Configurar as variáveis de ambiente básicas. Isso pode ser feito editando as variáveis diretamente ou pelo DINAMOcon.
-
DFENCE_PKCS11_IP: IP do HSM
- DFENCE_PKCS11_USER: Nome do usuário do HSM
Caso queira utilizar múltiplos usuários na aplicação o ideal é habilitar a variável:
Para informações adicionais consulte a seção de configuração.
As aplicações Java que fazem uso de PKCS#11 precisam utilizar algumas bibliotecas do HSM; todas estão na pasta de instalação. O nome do arquivo é tacndp11.dll
(Windows) ou libtacndp11.so
(Linux).
Exemplos:
-
Instalação 64-bis:
- Versão 64-bits:
C:\Program Files\Dinamo Networks\HSM Dinamo\sdk\c\tacndp11.dll
- Versão 32-bits:
C:\Program Files\Dinamo Networks\HSM Dinamo\sdk\32-bit\tacndp11.dll
- Versão 64-bits:
-
Instalação 32-bits:
C:\Program Files\Dinamo Networks\HSM Dinamo\sdk\c\tacndp11.dll
No Linux a biblioteca PKCS#11 estará na pasta de bibliotecas do sistema.
Exemplos:
-
CentOS/Red Hat 64-bits:
/usr/lib64/libtacndp11.so
-
Ubuntu/Debian 32-bits/64-bits e CentOS/Red Hat 32-bits:
/usr/lib/libtacndp11.so
Configurando Projeto
Para configurar o projeto é necessário adicionar a biblioteca tacndjavalib.jar
ao build path. A biblioteca ndjac.jar
só precisa ser adicionada caso esteja utilizando a JCA.
Código Exemplo (Java 9+)
A diferença do java 9+ e do java 8 é somente como as bibliotecas são importadas e como o objeto do provider é criado.
O código a seguir cria o provider com a biblioteca da Dinamo, carrega a keystore do usuário master usando a o método special password com a variável de ambiente DFENCE_PKCS11_SPECIAL_PWD habilitada, e em seguida lista o nome e conteúdo dos certificados na partição do usuário.
O resultado do exemplo é mais interessante se houver certificados na partição.
O arquivo p11config.cfg
precisa ter no mínimo os campos name e library. Abaixo exemplos:
name = dinamo
library = C:\Program Files\Dinamo Networks\HSM Dinamo\sdk\c\tacndp11.dll
name = dinamo
library = /usr/lib/libtacndp11.so
name = dinamo
library = /usr/lib64/libtacndp11.so
Nota
A Documentação de PKCS#11 da Oracle pode ser encontrada aqui.
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 o provider no java 8 o código é o seguinte:
Provider providerPKCS11 = new sun.security.pkcs11.SunPKCS11(pkcs11Config);
java.security.Security.addProvider(providerPKCS11);