栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java keyTool使用教程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java keyTool使用教程

最近公司做的项目中需要使用license机制授权,网上有开源的trueLicense,这个里边用到了keyTool生成密钥对,这里记录一下我使用keyTool过程。

1. 使用默认配置

# 生成私匙库
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.store" -storepass "abc123" -keypass "abcd1234" -dname "CN=catcher92, OU=catcher92, O=catcher92, L=Beijing, ST=Beijing, C=China"

# 导出证书
keytool -exportcert -alias "privateKey" -keystore "privateKeys.store" -storepass "abc123" -file "certfile.cer"

# 把这个证书文件导入到公匙库
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.store" -storepass "abc123"

keytool -list -keystore "privateKeys.store" -storepass "abc123"
keytool -list -keystore "publicCerts.store" -storepass "abc123"

默认是JKS存储类型,以及DSA算法,其中使用DSA算法时候需要指定keysize为1024(默认为2048),否则程程以后的私钥在代码中使用会报错。使用上述方式创建密钥时候会有警告,如下所示

做为一个完美主义者,怎么会让警告存在呢,按照警告内容修改。

2.不能使用1024长度的DSA加密算法,就改成RSA算法

# 生成私匙库
keytool -genkeypair -validity 3650 -alias "privateKey" -keyalg "RSA" -keystore "privateKeys.store" -keypass "abcd1234" -storepass "abc123" -dname "CN=catcher92, OU=catcher92, O=catcher92, L=Beijing, ST=Beijing, C=China"

# 导出证书
keytool -exportcert -alias "privateKey" -keystore "privateKeys.store" -storepass "abc123" -file "certfile.cer"

# 把这个证书文件导入到公匙库
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.store" -storepass "abc123"

keytool -list -keystore "privateKeys.store" -storepass "abc123"
keytool -list -keystore "publicCerts.store" -storepass "abc123"

通过keyalg指定算法为RSA,此时不再制定keysize即为默认的2048,这个时候还会有如下警告

3.不再使用JKS,改为PKCS12存储

# 生成私匙库
keytool -genkeypair -validity 3650 -alias "privateKey" -keystore "privateKeys.pfx" -storetype "PKCS12" -storepass "abc123" -dname "CN=catcher92, OU=catcher92, O=catcher92, L=Beijing, ST=Beijing, C=China" -keyalg "RSA" 

# 导出证书
keytool -exportcert -alias "privateKey" -keystore "privateKeys.pfx" -storepass "abc123" -file "certfile.cer"

# 把这个证书文件导入到公匙库
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.pfx" -storepass "abc123" -storetype "PKCS12"

keytool -list -keystore "privateKeys.pfx" -storepass "abc123"
keytool -list -keystore "publicCerts.pfx" -storepass "abc123"

 通过storetype指定存储类型为PKCS12,通过keyalg指定算法为RSA,这个时候没有警告了,执行完很干净

 4.上述使用了DSA和RSA加密算法,java还支持ECDSA,看网上的文章三者中DSA速度快 安全性没RSA高,ECDSA速度更快 安全性更高,所以我这里又改了下签名算法.

# 生成私匙库
keytool -genkeypair -validity 3650 -alias "privateKey" -keystore "privateKeys.pfx" -storetype "PKCS12" -storepass "abc123" -dname "CN=catcher92, OU=catcher92, O=catcher92, L=Beijing, ST=Beijing, C=China" -keyalg "EC"

# 导出证书
keytool -exportcert -alias "privateKey" -keystore "privateKeys.pfx" -storepass "abc123" -file "certfile.cer"

# 把这个证书文件导入到公匙库
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.pfx" -storepass "abc123" -storetype "PKCS12"

keytool -list -keystore "privateKeys.pfx" -storepass "abc123"
keytool -list -keystore "publicCerts.pfx" -storepass "abc123"

上述命令执行时候也不会有警告。


Java代码中获取KeyStore和签名算法代码:

# KeyStore
KeyStore.getInstance("JKS");
KeyStore.getInstance("PKCS12");

# 算法
Signature.getInstance("SHA1withDSA");
Signature.getInstance("SHA1withRSA");
Signature.getInstance("SHA1withECDSA");

keytool中算法名称和java代码中算法名称映射

keytool算法名称Java代码算法名称
DSASHA1withDSA
RSASHA1withRSA
ECSHA1withECDSA

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号