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); } }
JUnit測試用例:

import org.junit.Test; public class ExportCertFormKeystoreTest { @Test public void genkeyTest() { //生成密鑰測試 new ExportCertFormKeystore().genkey(); } @Test public void exportTest() { //導出證書文件測試 new ExportCertFormKeystore().export(); } }
運行測試用例之后,在D盤的根目錄下面會生成兩個文件:
demo.keystore
demo.cer