Criar JKS

E ai galera, outra ajuda:

Como eu faço para gerar um jks via código e não via “CMD”?

tem que usar o keytool pelo CMD e tudo mais, mas tem como chamar o keytool ou alguma classe via código?
para importar e exportar tambêm funciona?

Valeu.

As classes do keytool estão em “rt.jar” (que está no seu JDK), só que tem um probleminha, se não me engano, elas chamam “System.exit()” quando terminam :slight_smile:
Dê uma checada para ver se é isso mesmo.

  • Desculpe, elas estão em rt.jar. Procure por sun.security.tools.KeyTool :slight_smile:

[quote=entanglement]As classes do keytool estão em “rt.jar” (que está no seu JDK), só que tem um probleminha, se não me engano, elas chamam “System.exit()” quando terminam :slight_smile:
Dê uma checada para ver se é isso mesmo.

  • Desculpe, elas estão em rt.jar. Procure por sun.security.tools.KeyTool :slight_smile:
    [/quote]

Você ja viu algum exemplo usando as classes?

Valeu pela ajuda!

keytool -import -alias certificado.cer -keystore C:\\NFE\\KEYSTORE\\nomedokeystore.jks -file C:\\certificado.cer

vc pesquisou no guj?

tem mt material sobre isso.

att,

[quote=pedruhenrik]keytool -import -alias certificado.cer -keystore C:\\NFE\\KEYSTORE\\nomedokeystore.jks -file C:\\certificado.cer

vc pesquisou no guj?

tem mt material sobre isso.

att,[/quote]

Sim, e como olhei, tem um artigo que faz essa criação e ensina a exportar o .x509 e tudo mais.

So que minha duvida é como faz esse comando ai sem ser pelo prompt de comando do windows e sim via código java, saca?

abs.

Se não me engano (já vi alguém fazendo isso, para um sistema onde era necessário gerar um certificado auto-assinado para um web server) você pega o javadoc dessa classe (dando uma busca na Internet é fáci achá-lo) e você percebe que é relativamente fácil usá-la - basta passar os parâmetros para a classe KeyTool mais ou menos como você faria em uma linha de comando (ou seja, passando um array de strings).

Dei uma olhada nisso que você falou,

olhando documentação da classe KeyTool e esse método run: http://www.docjar.com/html/api/sun/security/tools/KeyTool.java.html
consegui chegar nisto:

[code]public static void main(String args[]){
try {
PrintStream ps = new PrintStream(new File(“C:/rod.jks”));
String comandos[] = {"-genkey", “-alias”, “guj”, “-keyalg”,“RSA”, “-keypass”, “guj123”, “-storepass”, “guj123”, “-keystore”,“C:/rod.jks”};

        KeyTool kt = null;
            
         kt.run(comandos, ps);
    } catch (Exception ex) {
        Logger.getLogger(TesteGera.class.getName()).log(Level.SEVERE, null, ex);
    }
}[/code]

Primeira coisa é que na hora de rodar, ele até cria um arquivo rod.jks no C:\ porem não é um arquivo .jks válido, isso por que está dando um erro:

run: 09/08/2011 17:59:53 chaves.TesteGera main GRAVE: null java.lang.NullPointerException at chaves.TesteGera.main(TesteGera.java:26)

muito provável porque o KeyTool está igual = null

A questão é, fui tentar fazer um new Keytool e não consegui, ele fala que a classe KeyTool é privada, não posso criar uma instacia nova desa classe, será que já está criada? como faço para usar a classe sem precisar cria-la?

Obrigado.

Acho que foi chamado o método “main”, porque ele é o único que consegue criar uma instância dessa classe.
Se você precisar redirecionar a saída do System.out para outro lugar, pode tentar usar System.setOut ( http://download.oracle.com/javase/6/docs/api/java/lang/System.html#setOut(java.io.PrintStream) )

[quote=entanglement]Acho que foi chamado o método “main”, porque ele é o único que consegue criar uma instância dessa classe.
Se você precisar redirecionar a saída do System.out para outro lugar, pode tentar usar System.setOut ( http://download.oracle.com/javase/6/docs/api/java/lang/System.html#setOut(java.io.PrintStream) )
[/quote]

Ta feito!

public static void main(String args[]) {
        try {
            
            String comandos[] = {"-genkey", "-alias", "guj", "-keyalg", "RSA", "-keypass", "guj123", "-storepass", "guj123", "-keystore", "C:/rod.jks", "-dname", "CN=RMM, OU=Mendes, O=Motta, L=Sao Paulo, ST=Sao Paulo, C=SP"};
            
            KeyTool.main(comandos);

        } catch (Exception ex) {
            Logger.getLogger(TesteGera.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

funciona!

Valeu pela ajuda!

Testei por um JOptionPane depois do comando main ali para ver se depois do main ele dava um System.exit() e rodou o JOptionPane, então ele num fecha o programa, continua executando!

Abs.

Pessoal, mais uma ajuda:

Consegui gerar o .jks, estou agora tentando exportar o x.509, porem a classe pede a senha, ate ai tudo bem, o problema é que ele pede via console:

Comandos:

String comandos[] = {"-export", "-alias", "guj", "-keystore", "C:/rod.jks", "-file", "C:/guj.x509"}; KeyTool.main(comandos);

E no console fica:

Enter keystore password

Como eu faço para exrever a senha no console sem digitar no console? porque no meu caso não vai ter ninguem para digitar a senha.

Valeu.

eu ACHO q existe um parametro chamado password ou keystorepassword,

algo do tipo, tem algo na documentação?

att,

[quote=pedruhenrik]eu ACHO q existe um parametro chamado password ou keystorepassword,

algo do tipo, tem algo na documentação?

att,[/quote]

String comandos[] = {"-export", "-alias", "guj", "-keystore", "C:/rod.jks", "-file", "C:/guj.x509", "-storepass", "guj123"};

Bem pensado :smiley:

È o -storepass

Valeu!

pedruhenrik, você poderia dar um help neste outro post meu? http://www.guj.com.br/posts/list/248747.java

Brigadão!