Keytool 工具使用

keytool 是jdk提供的秘钥和证书管理工具,可以查看签名信息。管理加密密钥、X.509 证书链和可信证书的密钥库(数据库)
基础知识:
一个签名文件包含证书和密钥,使用的是RSA非对称加密方式,证书其实就是公钥,公钥的生成需要私钥。
密钥库类型有(PKCS12、jks等),(-v 和 -rfc 不能一起用,这两个是区分输出内容的格式)
官方地址:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html

生成密钥对(生成秘钥和证书,也就是签名文件)


作为安卓开发者用keytool 最多的就是生成签名文件了。
生成密钥对(生成秘钥和证书,也就是签名文件)
-genkeypair

选项:
 -alias <alias>                  要处理的条目的别名
 -keyalg <keyalg>                密钥算法名称(RSA)
 -keysize <keysize>              密钥位大小(字节)
 -groupname <name>               Group name. For example, an Elliptic Curve name.
 -sigalg <sigalg>                签名算法名称(RSA\DSA)
 -storetype <storetype>          密钥库类型(PKCS12、jks,默认jks)
 -destalias <destalias>          目标别名(和上面的别名一样即可)
 -dname <dname>                  唯一判别名(如果没配置,输入命令时会提示输入相关信息,随便填就好了)
 -startdate <startdate>          证书有效期开始日期/时间(使用默认的即可)
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令(别名密码)
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -v                              详细输出


生成秘钥对(签名文件或者说RSA非对称加密方式)


-dname “CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)”;
实例:

keytool -genkeypair -v -keysize 2048 -dname “C=CN,ST=GD,L=SZ,O=GZ,OU=dev,CN=guangzhou.com” -alias signtest4 -keyalg RSA -validity 36500 -destalias signtest4 -keypass a123456 -keystore ./signtest4.jks -storepass a123456    


会有下面提示,可以忽略,也可以在上面的命令中指定秘钥库类型-storetype:
JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore ./signtest4.keystore -destkeystore ./signtest4.keystore -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。
实例:

keytool -genkeypair -v -storetype PKCS12 -keysize 2048 -dname “C=CN,ST=GD,L=SZ,O=GZ,OU=dev,CN=guangzhou.com” -alias signtest4 -keyalg RSA -validity 36500 -destalias signtest4 -keypass a123456 -keystore ./signtest4.jks -storepass a123456    


生成密钥(对称加密方式)


-genseckey

选项:
 -alias <alias>                  要处理的条目的别名
 -keypass <arg>                  密钥口令
 -keyalg <keyalg>                密钥算法名称(不能是非对称算法RSA,可以是AES\DES)
 -keysize <keysize>              密钥位大小(一定等于128 192还是256)
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型(PKCS12、jks)
 -v                              详细输出


生成秘钥(对称加密)
实例:

keytool -genseckey -v -storetype PKCS12 -alias signtest5 -keypass 123456 -keyalg AES -keysize 256 -keystore ./signtest5.jks -storepass 123456    

keytool -genseckey -v -storetype PKCS12 -alias signtest5 -keypass 123456 -keyalg DES -keysize 56 -keystore ./signtest5.jks -storepass 123456    


问题:
java.security.KeyStoreException: Cannot store non-PrivateKeys
需要指定密钥类型

列出密钥库中的条目(秘钥详细信息)

-list
选项(只列出实用的,其他信息都会在信息打印中默认显示):

-rfc 以 RFC 样式输出
-alias 要处理的条目的别名
-keystore 密钥库名称
-storepass 密钥库口令
-v 详细输出

通过签名文件(.jks/.keystore)可以查看证书串内容

keytool -list -rfc -keystore ./signtest3.keystore -storepass a123456    

通过签名文件(.jks/.keystore)可以查看签名的sha1、sha256、MD5(jdk版本较高的情况,会无法显示md5值,1.8.0_219 以上不行,因为jdk在高版本去掉了Disable MD5 or MD2 signed jars)

keytool -list -v -keystore ./signtest3.keystore -storepass a123456    


更改密钥库的存储口令

-storepasswd
选项:
-new 新口令
-keystore 密钥库名称
-storepass 密钥库口令
-v 详细输出

更改密钥密码

keytool -storepasswd -v -keystore ./signtest3.keystore -storepass a123456 -new 123456    

更改别名的密钥口令(更改别名alias密码)

-keypasswd
选项:
-alias 要处理的条目的别名
-keypass 密钥口令(别名alias原密码)
-new 新口令
-keystore 密钥库名称
-storepass 密钥库口令
-v 详细输出

更改别名密码

keytool -keypasswd -v -alias signtest2 -keypass a123456 -new 123456 -keystore ./signtest3.keystore -storepass a123456    


更改别名的名称(参考上面的命令)

-changealias


删除别名(参考上面的命令)

-delete

生成证书请求(少用)

-certreq

选项:
-alias 要处理的条目的别名(别名)
-sigalg 签名算法名称(SHA256withRSA)
-file 输出文件名
-keypass 密钥口令(别名密码)
-keystore 密钥库名称
-storepass 密钥库口令(签名文件密码)
-storetype 密钥库类型(PKCS12、jks)
-v 详细输出

根据签名文件生成证书请求(需要使用RSA生成的秘钥来导出)

keytool -certreq -v -alias signtest2 -sigalg SHA256withRSA -file mycert.cer -keypass a123456 -keystore ./signtest3.keystore -storepass a123456  

 
打印证书请求的内容

-printcertreq

选项:
-rfc 以 RFC 样式输出
-file 输入文件名
-v 详细输出

打印证书请求内容

keytool -printcertreq -rfc -file mycert.cer    


打印证书请求内容(输出结果和上面一样)

keytool -printcertreq -v -file mycert.cer  


根据证书请求来生成证书


-gencert

选项:
 -rfc                            以 RFC 样式输出
 -infile <filename>              输入文件名
 -outfile <filename>             输出文件名
 -alias <alias>                  要处理的条目的别名
 -sigalg <sigalg>                签名算法名称
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令(别名的密码)
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令(签名文件的密码)
 -v                              详细输出


根据证书请求生成证书(时间格式不清楚,所以不加开始时间的配置,默认当前时间)

keytool -gencert -rfc -infile mycert.cer -outfile mycert3.cer -alias signtest2 -sigalg SHA256withRSA -validity 36500 -keypass a123456 -keystore ./signtest3.keystore -storepass a123456    

keytool -gencert -rfc -infile mycert.cer -outfile mycert3.cer -alias signtest5 -sigalg SHA256withAES -validity 36500 -keypass 123456 -keystore ./signtest5.jks -storepass 123456  


根据签名文件导出证书

-exportcert

选项:
-rfc 以 RFC 样式输出
-alias 要处理的条目的别名
-file 输出文件名
-keystore 密钥库名称
-storepass 密钥库口令
-v 详细输出

根据签名文件导出证书文件(和根据-list 的-rfc直接打印签名信息看到)结果是一样的

keytool -exportcert -rfc -alias signtest2 -file mycert2.cer -keystore ./signtest3.keystore -storepass a123456    


打印证书内容

-printcert

选项
-rfc 以 RFC 样式输出
-file 输入文件名
-sslserver <server[:port]> SSL 服务器主机和端口
-jarfile 已签名的 jar 文件
-v 详细输出

通过证书文件(.RSA)查看证书

keytool -printcert -rfc -file SIGNTEST.RSA  

 

通过证书文件(.RSA)可以查看签名的sha1、sha256、MD5(jdk版本较高的情况,会无法显示md5值)

keytool -printcert -v -file SIGNTEST.RSA    

根据签名文件查看证书和公钥

keytool -list -rfc --keystore xxx.keystore | openssl x509 -inform pem -pubkey

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值