private void act(java.awt.event.MouseEvent evt) {                     
// TODO 将在此处添加您的处理代码:
        String way=jTextField1.getText();//生成证书的位置
        String alias=jTextField2.getText();//用户名
        String keysize=jTextField3.getText();//秘钥大小
        String validity=jTextField5.getText();
        String storename=jTextField4.getText();
        String dwname=jTextField6.getText();
        String zzname=jTextField7.getText();
        String city=jTextField8.getText();
        String state=jTextField9.getText();
        String county=jTextField10.getText();
        String mpass=jTextField11.getText();
        String pass=String.valueOf(jPasswordField1.getPassword());
        String c="keytool -genkey -alias "+alias+" -keyalg RSA -keysize "+keysize+" -keystore "+storename+" -validity "+validity;
        this.fun(way,c,pass,dwname,zzname,city,state,county,mpass);
    }                    
    String detail="";
    private void fun(String way,String c,String pass,String dwname,String zzname,String city,String state,String county,String mpass){
        try { 
            Runtime.getRuntime().exec(way+"\n"+c+"\n"+pass+"\n"+dwname+"\n"+zzname+"\n"+city+"\n"+state+"\n"+county+"\n"+"Y"+"\n"+mpass);
        } 
        catch (IOException k) { 
            k.printStackTrace();
        } 
        return; 
    }
这段程序主要的目的就是为了调用keytool输入事先设定好的代码,但是有bug 其实问题就是如何在cmd中批量输入命令 因为有java的朋友都可以试试看 如果运行keytool -genkey -alias A -keyalg RSA -keysize 1024 -keystore Akeystore -validity 3500后会有很多后续的选项要输入 希望大家帮帮忙

解决方案 »

  1.   

    把参数存在数组中.
    下面这段代码能生成一个完整的数字证书.你改一下就可以了.
    Runtime.getRuntime().exec("cmd /c keytool -genkey -alias A -keyalg RSA -keysize 1024 -keystore Akeystore -validity 3500"); 
      

  2.   

    问题是如果运行keytool命令 在输入keytool -genkey -alias A -keyalg RSA -keysize 1024 -keystore Akeystore -validity 3500之后会有很多后续的输入 比如密码 组织单位名==的输入
      

  3.   

    比如我打算证书生成在D:\下面 那么我不是因该先输入
    d:\
    keytool -genkey -alias A -keyalg RSA -keysize 1024 -keystore Akeystore -validity 3500
    我不会上传截图 否则我发一张图片估计就会比较清楚了 我点插入图片他要的是http地址。。
      

  4.   

    keytool -genkey -alias User(keystore的别名) -keyalg RSA -validity 7 -keystore keystore(指定keystore). 
    运行这个命令,系统提示: 
    Enter keystore password:yourpassword(输入密码) 
    What is your first and last name? 
    [Unknown]: your name(输入你的名字) 
    What is the name of your organizational unit? 
    [Unknown]:your organizational(输入你所在组织单位的名字) 
    What is the name of your organization? 
    [Unknown]:your organization name (输入你所在组织的名字) 
    What is the name of your City or Locality? 
    [Unknown]:your city name(输入所在城市的名字) 
    What is the name of your State or Province? 
    [Unknown]:your provice name(输入所在省份名字) 
    What is the two-letter country code for this unit? 
    [Unknown]:cn(输入国家名字) 
    Is CN=your name, OU=your organizaion, O="your organization name", 
    L=your city name, ST=your province name, C=cn correct? 
    [no]: yes 
    这个是我找到的一些资料,正如我上面所说的 keytool命令输入之后依旧需要往cmd中输入密码 名字 单位名字==也就是说我在runtime一条命令之后依旧需要输入一些选项,但我不知道怎么输入,我本来的设计是做了一个简易的代码生成器,根据我事先在窗口界面下设立的输入框,用户输入他的名字 密钥长度=信息然后生成代码段keytool -genkey -alias A -keyalg RSA -keysize 1024 -keystore Akeystore -validity 3500 再然后是手动输入之后的信息(因为是中文,相信因该谁都会用。。)但是昨天我看到一个关于ping命令的输入方法,所以我想也做一个类似的代替cmd输入的程序,不知道这样的程序能不能启动,因为就我目前所看到的一些例子往往都是ping 或者regedit之类的命令,都是一次只有一条命令输入而不相我这样要先只定证书生成的位置(就是在cmd开始的时候打个D:之类的)然后在输命令行,再按照之后的提示输入
      

  5.   

    终于明白楼主的意思了!!!1Runtime.getRuntime().exec(command);这个方法有个返回值 Process从返回的 Process 对象中取输入流与输出流, 然后通过这两个流交互就可以了未经测试, 不保证正确, 只是提供个思路!!
      

  6.   

    俺也是来学习滴,一起努力!up^up
      

  7.   

    你在命令行里填完不就行了。推荐一个工具KeyTool IUI
    (引用一下http://5aijava.javaeye.com/blog/123269的总结)
    JDK中keytool常用命令:
    -genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
    -alias       产生别名
    -keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中
    -keyalg      指定密钥的算法   
    -validity    指定创建的证书有效期多少天
    -keysize     指定密钥长度
    -storepass   指定密钥库的密码
    -keypass     指定别名条目的密码
    -dname       指定证书拥有者信息 例如:  "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"
    -list        显示密钥库中的证书信息      keytool -list -v -keystore sage -storepass ....
    -v           显示密钥库中的证书详细信息
    -export      将别名指定的证书导出到文件  keytool -export -alias caroot -file caroot.crt
    -file        参数指定导出到文件的文件名
    -delete      删除密钥库中某条目          keytool -delete -alias sage -keystore sage
    -keypasswd   修改密钥库中指定条目口令    keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage
    -import      将已签名数字证书导入密钥库  keytool -import -alias sage -keystore sagely -file sagely.crt
                 导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。