Interface gráfica que pode te ajudar a importar o certificado:
http://yellowcat1.free.fr/index_ktl.html
thingol, o arquivo é válido sim, inclusive para poder gerar as chaves através do keytool eu primeiro listei as propriedades do arquivo .pfx através do keytool -list.
Gostaria de saber de vc ou de outra pessoa que pode ajudar, se esse procedimento que adotei de: gerar um arquivo jks, e depois importar o pfx, está correto? pq to meio perdido nesse assunto… =/
Grato pela ajuda,
Thiago Melo.
Achei que a sua dúvida fosse somente com relação aos comandos…
O procedimento padrão para se obter um certificado digital é:
- Gerar as chaves
- Gerar o CSR
- Enviar o CSR para a CA
- Receber o arquivo de certificado e importar para keystore
Pelo o que você descreveu você só tem um arquivo .pfx (Personal Information Exchange). Este tipo de arquivo pode tanto conter apenas o certificado como a chave privada. Até o JDK 1.5, o comando keytool não permitia importar chaves privadas, somente certificados. Se o seu objetivo for somente gerar um arquivo JKS contendo o certificado, export o certificado do arquivo PFX (de um double-click no Windows e escolha a opção de “copy to file” e escolha o format DER base64) e import através do comando (keytool -importcert). Se for importar a chave também, use o comando “keytool -importkeystore”. Lembrando que isto só funciona no JDK 6. Aquela interface gráfica pode te ajudar.
oyama,
realmente eu só tenho o arquivo .pfx. Eu não participei na fase de aquisição desse certificado digital. Então o que eu tenho é só isso.
já baixei a interface gráfica e vou tentar exportar o certificado para DER e depois importar, assim como vc falou.
Grato,
Thiago Melo.
oyama,
estava tentando exportar o certificado para DER, mas quando vou no browser e tento exportar, essa opção esta desabilitada só restando exportar em .pfx =( Alguma dica?
Grato,
Thiago Melo.
Nunca trabalhei com PFX, mas pelo o que eu pesquisei o formato segue a especificação PKCS#12. Se for verdade, pode-se tentar usar a função “keytool -importkeystore” e usar como “-srcstoretype PKCS12”.
PFX é o nome Microsoft para o arquivo PKCS#12.
O que pode dar problemas é que, em algumas versões do JDK mais antigas, alguns certificados gerados pelo Certificate Services do Windows 2000/2003/2008 Enterprise Server contém alguns campos (AIA etc.) que contém URLs que essas versões não gostam (como “file:///servidor/certsrv/” ou coisa parecida.)
Outras coisas que talvez possam dar problemas são: você usar um certificado com chave muito grande (2048/4096 bits) e você não puser as “unrestricted policy files” no diretório jre/lib/security (acho que são us_policy.jar e local_security.jar, não sei os nomes certos de cor).
Além disso, o e-cpf e o e-cnpj são emitidos por autoridades certificadoras cuja raiz é o ICP-Brasil, que não está definido no CACERTS da JRE e que normalmente deve ser inserido nesse arquivo manualmente. (Acho que o password desse arquivo é “changeit”).
oyama,
consegui importar o certificado, usei aquela ide que vc indicou. Criei um jks vazio e fui em importar --> keystore’s entry --> Trusted certificate --> Regular certificate. Não sei se é isso mesmo, vou fazer uns testes e depois posto aqui o resultado.
Grato,
Thiago Melo.
thingol,
como informei antes eu consegui importar o certificado(exportei no IE como DER). Mesmo assim eu ainda tenho que fazer essa configuração no JRE?? se tiver pode me dizer como faço?
Grato,
Thiago Melo.
O arquivo cacerts é um keystore, com a senha changeit e o tipo JKS, que fica em um diretório jre/lib/security na sua instalação do Java.
O arquivo de certificado do ICP-Brasil deve ser baixado de https://www.icpbrasil.gov.br/CertificadoACRaiz.crt
Você pode incluir esse certificado em cacerts como se fosse um “trusted certificate”.
Talvez você precise incluir em cacerts os arquivos das autoridades certificadoras intermediárias (no caso, o da Receita Federal, e da autoridade certificadora que emitiu o e-cpf ou e-cnpj, como o certificado da Certisign ou do Serpro ou Serasa.
pessoal, como falei anteriormente eu consegui importar o certificado que está em formato .pfx. Porém para exportar para DER tive que desmarcar a opção “Exportar chave privada” no I.E senão ele só deixava eu exportar para outro .pfx. O problema é que no meu código de assinatura do arquivo xml, eu preciso da chave privada para poder a assinatura. Vcs sabem como eu posso extrair essa chave desse bendito arquivo .pfx?
pedaço do meu código:
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream(keystoreFile);
//load the keystore
ks.load(fis, "senha do arquivo".toCharArray());
//get the private key for signing.
PrivateKey privateKey = (PrivateKey) ks.getKey(privateKeyAlias, privateKeyPass.toCharArray());
Grato,
Thiago Melo.
Amigo, o correto é pegar o próprio arquivo PKCS#12 (também conhecido como PFX) e usar como keystore.
Vou dar um exemplo de como usar um arquivo PKCS#12 como keystore. Antes disso é necessário achar o alias correto (usando o comando keytool -list -storetype pkcs12 -keystore “arquivo.pfx” e vendo as entradas que contém “PrivateKeyEntry”.)
KeyStore ks = KeyStore.getInstance("PKCS12");
FileInputStream fis = new FileInputStream(keystoreFile);
//load the keystore
ks.load(fis, "senha do arquivo".toCharArray());
//get the private key for signing.
PrivateKey privateKey = (PrivateKey) ks.getKey(privateKeyAlias, privateKeyPass.toCharArray());
thingol , vlw mesmo cara!!! uma solução mto simples. Testei aqui e funcionou blz cara, consegui assinar meu xml. vlw mesmo. O problema todo era que eu pensava que tinha que gerar um jks…
Agradeço também a colaboração do oyama, vlw tbm !!
Grato,
Thiago Melo.
Pois é, pq dizem q tem q gerar um JKS ou um CER se pode ser feito de maneira direta?
Eu to me batendo ainda, tô no início de tudo, mas essa foi a explicação mais simples q vi até agora, eu
baixei um certificado para teste, o Associacao.pfx, breve estarei testando isso.
Valeu as dicas aí.
Thingol,
Pode dar uma dica rapidex?
Opa… só para me entender melhor…
Estou com uma duvida sobre o arquivo .cer, ele é o mesmo que o pfx?
Pelo que entendi funciona assim…
Temos o arquivo pfx, o qual usamos para pegar a Chave Privada e assinar algum documento… e para isso devemos fazer o camando:
[code]FileInputStream fis = new FileInputStream(keystoreFile);
//load the keystore
ks.load(fis, “senha do arquivo”.toCharArray());[/code]
Sendo a varíavel “keystoreFile” o caminho do arquivo .pfx (correto?)
Bom… poderiamos exportar o arquivo .CER do certificado (arquivo pfx) e usar esse .CER apra assinar os documentos tb ?? Dentro desse .CER temos tanto a chave Privada quanto a Publica ?
Pergunto isso, porque o .CER que é usado para jogarmos dentro do keystore (“cacerts” por exemplo). E também, se usarmos o token, podemos exportar o .CER para usar…
Vlw
O arquivo .cer ou .crt contém apenas a chave pública e não pode ser usado para assinar ou decifrar nada.
Um arquivo .cer (que só contém a chave pública) pode ser usado para:
- Conferir uma assinatura;
- Cifrar algo (a parte de decifração fica com o possuidor da chave privada);
- Conferir uma cadeia de certificados (“certificate chain”), se esse certificado for emitido por alguma autoridade certificadora que está em CACERTS ou então em um objeto CertPath.
Então para eu assinar com chave privada um documento, preciso usar diretamento o arquivo PFX ou então diretamente um token (A3) ?? As configurações de segurança no JavaViewer só me ajudam na parte dos certificados públicos ??