Boa tarde pessoal, estou com um pequeno problema para manipular o certificado digital a3.
Com o certificado conectado, tudo funciona corretamente.
Quando eu retiro o certificado, apresenta a mensagem: “Token has been removed”. O que está correto.
Porém quando eu recoloco o certificado, a mensagem de “Token has been removed” continua aparecendo.
Como se o token não recarregasse.
O que posso fazer?
Segue a classe que eu carrego o certificado.
public class CertificadoA3 {
private static KeyStore keystore;
public CertificadoA3() {
}
public static KeyStore getInstance(char[] senha) throws MaximaException {
if (keystore == null) {
try {
String fileCfg = "SmartCard.cfg";
Provider p = new sun.security.pkcs11.SunPKCS11(fileCfg);
Security.addProvider(p);
keystore = KeyStore.getInstance("pkcs11", p);
keystore.load(null, senha);
} catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException ex) {
throw new MaximaException("Ocorreu um ao carregar certificado digial A3.\n" + ex.getMessage());
}
}
return keystore;
}
}
Agora a classe que eu testo o certificado:
public class ValidaCertificado {
public Boolean certificadoIsAtivo(String senha) {
try {
KeyStore ks = CertificadoA3.getInstance(senha.toCharArray());
String alias = ks.aliases().nextElement();
X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);
PrivateKey privatekey = (PrivateKey) ks.getKey(alias, senha.toCharArray());
SocketFactoryDinamico socketFactory = new SocketFactoryDinamico(certificate, privatekey);
//arquivo que contém a cadeia de certificados do serviço a ser consumido
socketFactory.setFileCacerts(this.getClass().getResourceAsStream("/br/com/maximasolutions/fiscal/nfe/NFeCacerts"));
return true;
} catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException ex) {
Logger.getLogger(ValidaCertificado.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
}