一、简介

Keytool是JDK自带的证书管理工具,在jdk/bin目录下,可以用来生成自签名证书、导入导出证书、打印证书信息等。

回顾下前一章的一些概念:PKI:公钥基础设施

X.509 : PKI事实上的标准

CSR:向CA申请证书的签名请求文件,用ASN.1标准描述

证书链:证书之间的上下级信任关系

根证书:证书链的最顶层

DER:证书二进制格式

BER:DER的一个子集

CER:一般用于windows的证书文件格式

CRT:一般用于Linux的证书,包含公钥和主体信息

pem:Base64编码的DER证书

p12:证书交换格式,把证书和密钥(公钥+私钥)打包在一起,可以再加一层保护(.pkcs12 .pfx .p12)

JKS:Java支持的证书格式。

BKS:安卓无法直接支持JKS,使用的是BKS类型证书。

Keystore:Keytool将密钥和证书存在一个称为keystore的文件中,包含密钥实体和可信任的证书实体。

二、Java证书工具Keytool的使用

2.1 生成自签名证书.jks

创建一个名为myjks的证书,存放在teststore.jks的密钥库中。keytool -genkeypair -alias myjks -keysize 2048 -keyalg RSA -validity 3650 -keystore teststore.jks -storetype JKS- genkeypair: 生成公私钥对条目,私钥不可见,公钥会以证书格式保存在keystore中。

- alias: 指定别名,区分不同条目,默认mykey,每个keystore关联一个alias

- keysize: 密钥长度

- keyalg: 公私钥算法

- validity: 证书过期时间

- keystore: 指定存储密钥的位置,不指定的话会生成到用户目录

- storetype: 密钥库类型 JKS PKCS等

实际使用时名称与姓氏填域名信息;

先输入的是keystore密钥库的口令。

2.2 导出自签名证书keytool -export -alias myjks -keystore teststore.jks -file myjks.crt

这个证书就可以分发给客户端使用。

2.2 查看证书信息keytool -list -v -keystore teststore.jks

2.3 显示证书内容keytool -list -rfc -keystore teststore.jks -storepass 12345678

2.4 导出cer证书keytool -alias myjks -exportcert -keystore teststore.jks -file teststore.cer

双击证书,可以查看cer内容,点安装证书就可以导入根证书。

2.5 导出公钥keytool -list -rfc --keystore teststore.jks | openssl x509 -inform pem -pubkey

三、生成一个根证书来签发二级证书

3.1 生成证书签名请求文件CSRkeytool -certreq -alias myjks -keystore teststore.jks -file teststore.csr

3.2 使用自签名证书作为CA根证书,模拟CA给CSR签发证书

生成模拟CA的密钥对keytool -genkeypair -alias rootca -keysize 2048 -keyalg RSA -validity 3650 -keystore rootstore.jks -storetype JKS

用CA的私钥签名后与myjks的公钥生成一个证书:keytool -gencert -alias rootca -keystore rootstore.jks -infile teststore.csr -outfile teststore_new.crt

可以看到teststore_new.crt的签发人已经变了:

3.3 将二级证书导回teststore库中keytool -import -v -alias rootca -file teststore_new.crt -keystore teststore.jks

这时证书链会发生变化 :keytool -list -v -keystore teststore.jks

这时可以把root证书导出给客户端内置,服务端绑定二级证书,这样客户端验证时可以用根证书验证二级证书。大部分程序直接使用一级的自签名证书即可,但若需要双向验证,服务端验证客户端时不同客户端最好使用服务端的rootca私钥来签发,这样服务端可以直接用一个rootca的证书验证。实现了动态扩展且客户端的证书不同。

3.4 从teststore导出rootca证书keytool -export -alias rootca -keystore teststore.jks -file rootca.crt

四、Keytool其它常用命令// 以rfc模式打印,即base64可见字符,与pem编码格式一样。 -v为详细输出keytool -printcert -rfc -file rootca.crt// 删除密钥库中的条目keytool -delete -alias rootca -keystore teststore.keystore// 修改证书库密码,输入旧密码或加参数 -storepass 111111keytool -storepasswd -new 123456 -keystore truststore// 修改某条目密码keytool -keypasswd -alias myCA -keypass 654321 -new newpass -storepass 123456 -keystore myCALib

java 证书查看工具_程序员必备工具 Java证书工具Keytool的使用相关推荐

  1. 开发APP的java工具_程序猿必备的java的app开发工具有哪些

    每一位java程序员都会有套工具来应对工作上的挑战.多年来,java程序员使用软件来完成他们的工作.有很多工具对他们是有用的,不过对于初入行的人员来说,寻找合适的工具是困难的,并且是浪费时间的.jav ...

  2. el-date-picker设置默认日期_程序员必备:Java 日期处理的十个坑

    前言 整理了Java日期处理的十个坑,希望对大家有帮助. 一.用Calendar设置时间的坑 反例: Calendar c = Calendar.getInstance(); c.set(Calend ...

  3. mac java api文档_程序员必备 Dash for mac 各种语言和系统Api文档

    Dash for mac  5.5.0 是一款功能强大的API文档浏览器和代码片段管理器,内置了丰富的API文档,多达150多种,可以在线下载各种开发API和文档资料,可以让您集中管理API文档,包括 ...

  4. 11个程序员必备简捷开发辅助工具

    程序员必备简捷开发辅助工具总结 写在前面: 工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率.Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多 ...

  5. 程序员必备的10款工具软件

    程序员必备的10款工具软件 第一款:TrueCrypt 用TrueCrypt的人可能并不是很多,这是一个能对磁盘加密的软件,可以对某一磁盘分区进行加密,开启计算机后,如果你没有打开TrueCrypt ...

  6. java excel 插件开发工具_程序员常用的15 种开发者工具推荐

    程序员常用的15 种开发者工具推荐:Java 线上诊断工具 Arthas.IDE 插件 Cloud Toolkit.混沌实验注入工具 ChaosBlade.Java 代码规约扫描插件.应用实时监控工具 ...

  7. Java如何接手别人项目_程序员必备技能——怎样快速接手一个项目

    作为一个程序员,我们很少能从头到尾参与一个新项目的开发.如果你经常开发的是新项目,那你真是太幸福了. 更多的情况是半路进入一个项目组进行开发,或者是有其他同事离职了,之前由他维护的系统转交给你维护. ...

  8. 程序员必备的6款工具软件,炒鸡实用!

    都说程序员的电脑上有各种各样的软件工具.编辑器.插件等等,不同岗位的程序员使用的工具也不同. 今天就给大家分享6款程序员必备的工具软件,看看有没有你常用的! 6款程序员必备工具软件 1 oh-my-z ...

  9. 收藏!程序员必备的软件开发工具大全!(附高速下载地址)

    对于每一位开发者而言,软件开发工具的重要性显然不言而喻.事实上,除了个人能力之外,它们也在团队的效率及实际生产力层面扮演着关键性角色. 今天阿晨就把自己的私货全部掏出来整理在下面! 内附高速下载地址! ...

最新文章

  1. Import error: no module named cv2 错误解决方法
  2. Android Navigation Drawer(导航抽屉)
  3. golang中的panic
  4. 广州linux课程,广州linux课程培训
  5. matlab的compass怎么用,Compass用法指南
  6. 文件权限二(特殊权限、隐藏属性、文件访问控制列表、切换用户方式)
  7. 一次频繁Full GC的排查过程,根源居然是它...
  8. 【牛客 - 272B】Xor Path(树上操作,路径异或值)
  9. 为Python终端提供持久性历史记录
  10. ue4 如何获取端口号_尝试在UE4.22中实现罪恶装备Xrd的卡通渲染
  11. ESP8266 多通道
  12. C#3.0中的扩展方法
  13. EAUML日拱一卒-活动图::14.2 Behavior StateMachines (6) - Transitions
  14. 百度CarLife Android车机端黑屏问题
  15. the system can not open the device or file specified解决方案
  16. C/C++程序员必看——豆瓣评分9.0+的经典
  17. Thingsboard 2.5 CE版本项目结构说明
  18. 任何一台计算机硬件系统都是油,大学生计算机基础第一章.ppt
  19. oracle 中此处列不允许,oracle 此地不允许序列
  20. CMOS图像传感器——Remosaic技术

热门文章

  1. Linux中sysstat服务,Linux Sysstat性能收集的调整方法
  2. python 指纹_详解Python3之数据指纹MD5校验与对比
  3. java解析bt协议详解_【转】bt协议的详细分析
  4. 不一样的方式实现performSelector接收多个参数(转)
  5. loadrunner如何监控windows系统的资源
  6. Total Commd配置文件详解
  7. 6010.Cacti监控CMTS思科uBR7246路由器风扇和电源状态
  8. 基于Verilog用状态机设计交通灯控制器
  9. Java8 List removeIf用法技巧
  10. surfacert能跑java么_Surface RT竟然能跑Linux!微软悄然封杀