首页域名资讯 正文

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

2025-01-29 5 0条评论

什么是Keytool?

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 plain copy

  1. publicclass ExportCertFormKeystore {
  2. public void execCommand(String[] arstringCommand) {
  3. for (int i = 0; i < arstringCommand.length; i++) {
  4. out.print(arstringCommand[i] + ” “);
  5. }
  6. try {
  7. getRuntime().exec(arstringCommand);
  8. catch (Exception e) {
  9. out.println(e.getMessage());
  10. }
  11. }
  12. public void execCommand(String arstringCommand) {
  13. try {
  14. getRuntime().exec(arstringCommand);
  15. catch (Exception e) {
  16. out.println(e.getMessage());
  17. }
  18. }
  19. /**
  20. * 生成密钥
  21. */
  22. public void genkey() {
  23. String[] arstringCommand = new String[] {
  24. “cmd “, “/k”,
  25. “start”, // cmd Shell命令
  26. “keytool”,
  27. “-genkey”, // -genkey表示生成密钥
  28. “-validity”, // -validity指定证书有效期(单位:天),这里是36000天
  29. “36500”,
  30. “-keysize”,//     指定密钥长度
  31. “1024”,
  32. “-alias”, // -alias指定别名,这里是ss
  33. “ss”,
  34. “-keyalg”, // -keyalg 指定密钥的算法 (如 RSA DSA(如果不指定默认采用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. public void export() {
  53. String[] arstringCommand = new String[] {
  54. “cmd “, “/k”,
  55. “start”, // cmd Shell命令
  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 plain copy

  1. importjunit.Test;
  2. publicclass ExportCertFormKeystoreTest {
  3. @Test
  4. public void genkeyTest() {
  5. //生成密钥测试
  6. new ExportCertFormKeystore().genkey();
  7. }
  8. @Test
  9. public void exportTest() {
  10. //导出证书文件测试
  11. new ExportCertFormKeystore().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 导出证书

 

文章版权及转载声明

本文作者:亿网 网址:https://www.edns.com/ask/post/162866.html 发布于 2025-01-29
文章转载或复制请以超链接形式并注明出处。