Closed carlosspohr closed 1 year ago
Blz Carlos? O Serial é o identificado do TOKEN. Qnd existem conflitos de A3. è a unica forma de se capturar o token correto.
A forma de se pegar o seria pelo gerenciador de Tokens, que é instalado junto do A3 na máquina. Lembrando que esse serial, está ligado ao dispositivo que o A3 foi instalado, e não ao A3 em si.
E como dica geral: Remova o A3 da lista de Certificados aceitos pelo seu sistema; A dor de cabeça dele não vale.
Oi Samuel, boa tarde. Muito obrigado pelo seu retorno.
Estou dando uma olhada no código que foi implementado pelo time, e esse é o ponto que está gerando o problema:
// vem de um combo gerado a partir do CertificadoService.listaCertificadosWindows()
String aliasCertificado = ...;
// vem da configuração do usuário.
TipoCertificadoA3 tipoCertificado = TipoCertificadoA3.valueOf(config.getDriverLeitoraCartao()); // retorna OBERTHUR
String marcaA3 = tipoCertificado.getMarca();
String dllA3 = tipoCertificado.getDll();
// aqui autentica o certificado incorreto (ex: o eCPF ao invés do eCNPJ).
Certificado certificado = CertificadoService.certificadoA3(marcaA3, dllA3, inputPassword, aliasCertificado );
keyStore = CertificadoService.getKeyStore(certificado);
De fato na listagem dos certificados do windows, vem vários e vou adicionar um filtro para pegar apenas os que são do tipo que o usuário está configurado. Vou esperar o pessoal do administrativo me trazer os certificados para validar isso aqui e te dou um retorno aqui.
Blz Carlos? O Serial é o identificado do TOKEN. Qnd existem conflitos de A3. è a unica forma de se capturar o token correto.
A forma de se pegar o seria pelo gerenciador de Tokens, que é instalado junto do A3 na máquina. Lembrando que esse serial, está ligado ao dispositivo que o A3 foi instalado, e não ao A3 em si.
E como dica geral: Remova o A3 da lista de Certificados aceitos pelo seu sistema; A dor de cabeça dele não vale.
Olá, Samuel.
Ao tentarmos realizar uma assinatura passando o token disponibilizado pelo gerenciador de tokens instalado na máquina, o seguinte erro é retornado na método br.com.swconsultoria.certificado.CertificadoService.getSlot(String, String): br.com.swconsultoria.certificado.exception.CertificadoException: Erro ao carregar informações do certificado:Erro Ao pegar SlotA3: CKR_TOKEN_NOT_PRESENT
Eu gostaria de saber se você tem uma idéia do motivo de este erro estar acontecendo.
Olá Samuel.
Dei uma olhada na issue #4, que já foi finalizada, e estamos com um problema parecido aqui, porém não sei se é aplicável a solução que você colocou no neste artigo.
Nós temos uma funcionalidade de assinatura de diplomas digitais com certificado A3, e alguns usuários podem ter dois certificados no PC (eCPF e eCNPJ), como por exemplo um diretor de faculdade.
Basicamente o erro acontece quando:
O usuário escolhe o seu eCPF, informa a senha e a sua biblioteca retorna o certificado corretamente. Na sequência, o usuário escolhe o seu eCNPJ, informa a senha desse certificado (é diferente da do eCPF) e a sua biblioteca retorna o eCPF (da primeira autenticação). Ao reiniciar o processo Java, escolher na primeira vez o certificado eCNPJ, ele funciona, porém se ele escolher o eCPF ...vai sempre retornar o eCNPJ.
No artigo que você fez, tem um parâmetro chamado "serial" que você usa para diferenciar cada certificado. A minha dúvida aqui é com o valor desse parâmetro...ele é obtido de algum lugar ou pode ser aleatório?