Erro PKCS11

3 respostas
O

O usuário PatricMaffi me mandou esta dúvida via MP. Estou postando aqui, pois prefiro compartilhar a dúvida dele e as minhas respostas:

PatricMaffi:
Boa Tarde Oyama Vi uma resposta sua sobre certificados

precisava de um auxilio, sobre certificados digitais
tenho uma aplicação para NFe, e estou tendo um erro nesta linha de codigo

Provider p = new sun.security.pkcs11.SunPKCS11(getStrArquivoConfiguracaoToken());
        Security.addProvider(p);
        KeyStore ks = KeyStore.getInstance("pkcs11");

tudo esta configurado 100% certo
qdo rodo ele no tomcat, com ajuste do keystore no xml server do tomcat
ele roda tranquilo, assina faz conexão etc.

mais qdo rodo no glassfish, da o seguinte erro

java.security.KeyStoreException: pkcs11 not found
Caused by: java.security.NoSuchAlgorithmException: pkcs11 KeyStore not available
entao acredito que não seja problema no código e sim alguma configuração necessaria no glassfish

se puder me ajudar fico grato
valewww

PatricMaffi

Aparentemente o erro é porque a JDK que está sendo usada para rodar o Glassfish não tem implementado o provider para PKCS11. Acho que somente na JDK 1.6 é que o provider de PKCS11 vem na distribuição da JDK.

3 Respostas

P

Opa Oyama,

entao o JDK utilizado é o 1.6, inclusive o pksc11 quando implementado com um e-token funciona
o problema ocorre ao utilizar o smartcard, que utilizam dlls diferentes
não sei se é isso q pode estar acarretando o erro

para o etoken no arquivo token.cfg defino seguinte código
este funciona

name=Safesig library = C:\WINDOWS\system32\eTpkcs11.dll

este é o do smartcard o que ocasiona o problema

name=Safesig library = C:\WINDOWS\system32\aetpkss1.dll

vi em algum lugar falando sobre NSS do mozila para configuração de ssl
mais ainda não consegui algo que resolvesse meu problema

O

[Comentário irônico]
Nada como postar todos os detalhes para que todos entendam melhor o problema…
[/Comentário irônico]

Patrick

Eu nunca mexi com Provider PKCS11/Smart Card/e-token. Portanto tudo que eu vou falar eu nunca testei e não tenho certeza se está correto.

Aparentemente ele não está encontrando o provider para ler o Smart Card. Lendo um post do do GUJ (http://www.guj.com.br/posts/list/110442.java ), que alias até você postou uma dúvida, a dica era colocar o separador de diretório com “/” ao invés de “” . Não tenho a mínima idéia se é isto mesmo. Outra dica que eu li, é colocar o provider no Keystore.getInstance() (é o segundo parâmetro). Não sei exatamente o que se coloca neste caso de provider PKCS11 implementado via DLL. Pode ser a property “name” que você definiu no arquivo token.cfg.

F

Andei usando o pkcs11 para a NFe,
bom implementei smart card com a leitora Perto, que usa a dll dkck201.dll, este funcionou perfeitamente.

Depois fui fazer um token, o tal iKey2032 , esse deu uma baita dor de cabeça.
até onde vi ele usa a aetpkss1.dll, e não dei jeito de fazer funcionar, entrei em contato com o pessoal da Certisign também não souberam me ajudar. Também testei no emissor de NFe do governo de SP, ele também não detectou o token, cheguei a entrar em contato com a equeipe que desenvolveu o emissor, mas me ajudariam somente se eu fosse uma empresa de SP. Nessa hora percebi que perderia muito tempo com ele, então trocamos para um smart card.

bom, se entendi bem você está usando a mesma dll, vi o seu post e chamou a atenção…
tbm uso JDK 6

estamos ai
abraço!

Criado 2 de fevereiro de 2009
Ultima resposta 4 de fev. de 2009
Respostas 3
Participantes 3