技术文档

java 如何调用 keytool 生成keystore 和 cer 证书

什么是Keytool?

java 如何调用 keytool 生成keystore 和 cer 证书

keytool用来管理私钥仓库(keystore)和与之相关的X.509证书链(用以验证与私钥对应的公钥),也可以用来管理其他信任实体。

什么是keystore?

是java的密钥库、用来进行通信加密用的、比如数字签名。keystore就是用来保存密钥对的,比如公钥和私钥。

什么是cer?

用于存储公钥证书的文件格式。公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密。

keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,

包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥
ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写

下面给出一个java 调用 keytool 生成keystore 和 cer 证书的例子测试

 

[java]view plaincopy

  1. publicclassExportCertFormKeystore{
  2. publicvoidexecCommand(String[]arstringCommand){
  3. for(inti=0;i<arstringCommand.length;i++){
  4. out.print(arstringCommand[i]+”“);
  5. }
  6. try{
  7. getRuntime().exec(arstringCommand);
  8. }catch(Exceptione){
  9. out.println(e.getMessage());
  10. }
  11. }
  12. publicvoidexecCommand(StringarstringCommand){
  13. try{
  14. getRuntime().exec(arstringCommand);
  15. }catch(Exceptione){
  16. out.println(e.getMessage());
  17. }
  18. }
  19. /**
  20. *生成密钥
  21. */
  22. publicvoidgenkey(){
  23. String[]arstringCommand=newString[]{
  24. “cmd“,“/k”,
  25. “start”,//cmdShell命令
  26. “keytool”,
  27. “-genkey”,//-genkey表示生成密钥
  28. “-validity”,//-validity指定证书有效期(单位:天),这里是36000天
  29. “36500”,
  30. “-keysize”,//指定密钥长度
  31. “1024”,
  32. “-alias”,//-alias指定别名,这里是ss
  33. “ss”,
  34. “-keyalg”,//-keyalg指定密钥的算法(如RSADSA(如果不指定默认采用DSA))
  35. “RSA”,
  36. “-keystore”,//-keystore指定存储位置,这里是d:/demo.keystore
  37. “d:/demo.keystore”,
  38. “-dname”,//CN=(名字与姓氏),OU=(组织单位名称),O=(组织名称),L=(城市或区域名称),
  39. //ST=(州或省份名称),C=(单位的两字母国家代码)”
  40. “CN=(SS),OU=(SS),O=(SS),L=(BJ),ST=(BJ),C=(CN)”,
  41. “-storepass”,//指定密钥库的密码(获取keystore信息所需的密码)
  42. “123456”,
  43. “-keypass”,//指定别名条目的密码(私钥的密码)
  44. “123456”,
  45. “-v”//-v显示密钥库中的证书详细信息
  46. };
  47. execCommand(arstringCommand);
  48. }
  49. /**
  50. *导出证书文件
  51. */
  52. publicvoidexport(){
  53. String[]arstringCommand=newString[]{
  54. “cmd“,“/k”,
  55. “start”,//cmdShell命令
  56. “keytool”,
  57. “-export”,//–export指定为导出操作
  58. “-keystore”,//-keystore指定keystore文件,这里是d:/demo.keystore
  59. “d:/demo.keystore”,
  60. “-alias”,//-alias指定别名,这里是ss
  61. “ss”,
  62. “-file”,//-file指向导出路径
  63. “d:/demo.cer”,
  64. “-storepass”,//指定密钥库的密码
  65. “123456”
  66. };
  67. execCommand(arstringCommand);
  68. }
  69. }

 

JUnit测试用例:

[java]view plaincopy

  1. importjunit.Test;
  2. publicclassExportCertFormKeystoreTest{
  3. @Test
  4. publicvoidgenkeyTest(){
  5. //生成密钥测试
  6. newExportCertFormKeystore().genkey();
  7. }
  8. @Test
  9. publicvoidexportTest(){
  10. //导出证书文件测试
  11. newExportCertFormKeystore().export();
  12. }
  13. }

 

运行测试用例之后,在D盘的根目录下面会生成两个文件:

Demo.keystore

Demo.cer

其中SSL证书采取公钥和私钥的经典案例。SSL证书采用了技术含量比较高的加密技术。日后GDCA()将会持续为大家推荐更多关于SSL证书的技术知识。让大家正确认识SSL证书,快速无误部署HTTPS安全协议。更多资讯,请关注GDCA。

 

相关搜索

  • keystore 导出公钥cer
  • keystore cer
  • cer文件生成keystore
  • keystore生成cer
  • cer转keystore
  • cer导入keystore
  • java keystore cer
  • keystore导出私钥
  • keystore 导出证书

 

©2020-2024   万云SSL证书  (www.sslssl.com.cn)  万云科技   豫ICP备2020034358号-10