JAVA調用 keytool 生成keystore 和 cer 證書


 

keytool是一個Java數據證書的管理工具,

keytool將密鑰(key)和證書(certificates)存在一個稱為keystore的文件中在keystore里,

包含兩種數據:
密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(采用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公鑰

ailas(別名)每個keystore都關聯這一個獨一無二的alias,這個alias通常不區分大小寫

下面給出一個java 調用 keytool 生成keystore 和 cer 證書的例子測試:

public class ExportCertFormKeystore {

    public void execCommand(String[] arstringCommand) {
        for (int i = 0; i < arstringCommand.length; i++) {
            System.out.print(arstringCommand[i] + " ");
        }
        try {
            Runtime.getRuntime().exec(arstringCommand);

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
    public void execCommand(String arstringCommand) {
        try {
            Runtime.getRuntime().exec(arstringCommand);
            
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    /**
     * 生成密鑰
     */
    public void genkey() {
        String[] arstringCommand = new String[] {

        "cmd ", "/k",
                "start", // cmd Shell命令

                "keytool",
                "-genkey", // -genkey表示生成密鑰
                "-validity", // -validity指定證書有效期(單位:天),這里是36000天
                "36500",
                "-keysize",//     指定密鑰長度
                "1024",
                "-alias", // -alias指定別名,這里是ss
                "ss",
                "-keyalg", // -keyalg 指定密鑰的算法 (如 RSA DSA(如果不指定默認采用DSA))
                "RSA",
                "-keystore", // -keystore指定存儲位置,這里是d:/demo.keystore
                "d:/demo.keystore",
                "-dname",// CN=(名字與姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區域名稱),
                            // ST=(州或省份名稱), C=(單位的兩字母國家代碼)"
                "CN=(SS), OU=(SS), O=(SS), L=(BJ), ST=(BJ), C=(CN)",
                "-storepass", // 指定密鑰庫的密碼(獲取keystore信息所需的密碼)
                "123456", 
                "-keypass",// 指定別名條目的密碼(私鑰的密碼)
                "123456", 
                "-v"// -v 顯示密鑰庫中的證書詳細信息
        };
        execCommand(arstringCommand);
    }

    /**
     * 導出證書文件
     */
    public void export() {

        String[] arstringCommand = new String[] {

        "cmd ", "/k",
                "start", // cmd Shell命令

                "keytool",
                "-export", // - export指定為導出操作 
                "-keystore", // -keystore指定keystore文件,這里是d:/demo.keystore
                "d:/demo.keystore",
                "-alias", // -alias指定別名,這里是ss
                "ss",
                "-file",//-file指向導出路徑
                "d:/demo.cer",
                "-storepass",// 指定密鑰庫的密碼
                "123456"
                
        };
        execCommand(arstringCommand);
    
    }
}
View Code

 JUnit測試用例:

import org.junit.Test;

public class ExportCertFormKeystoreTest {

    @Test
    public void genkeyTest() {
        //生成密鑰測試
        new ExportCertFormKeystore().genkey();
    }
    @Test
    public void exportTest() {
        //導出證書文件測試
        new ExportCertFormKeystore().export();
    }
}
View Code

運行測試用例之后,在D盤的根目錄下面會生成兩個文件:

demo.keystore

demo.cer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM