java keytool 深入理解
2022/3/19 11:29:44
本文主要是介绍java keytool 深入理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
关于 Java Keytool 的基本介绍可以参考: Java Keytool 命令行工具
本篇主要解决如下问题:
-genkeypair
命令产生的究竟是什么呢?-genkey
和-genkeypair
的关系是怎样的呢?- 使用Java代码如何获取keystore文件的内容呢?
-genkeypair
命令产生的究竟是什么呢?
下面使用-genkeypair产生密钥对到文件my.keystore 中。
keytool -genkeypair -alias mykey -keyalg RSA -keypass 111111 -keystore my.keystore -storepass 111111 -dname "CN=myname,OU=mydept,O=mycompany,L=HF,ST=AH,C=CN"
-genkeypair
产生在证书库文件中的内容叫做“条目”,这个条目不仅仅是密钥对。一个库文件可以包含多个条目。
上面的命令产生的证书库文件名是: my.keystore
- 条目的别名是 mykey,
-alias
选项的默认值就是mykey , 所以这个参数如果忽略,别名默认就是mykey - 条目管理的密码和证书库管理的密码都是 111111
- 密钥的算法是RSA
上面的命令产生了一对密钥同时也产生了使用X.509 v3 自签名的证书, 如何查看证书的内容呢?方式有多种, 最简单的就是使用-list
命令, 也可以使用Java代码获取。
使用 -list
查看证书库中的条目的命令如下:
keytool -list -rfc -keystore my.keystore -storepass 111111
- -rfc ,将以可打印的编码格式输出证书
从上图可以看出, 这个证书库文件包含一个条目,条目的类似是 PrivateKeyEntry, 证书链长度是1 , 有一个证书。
从上面的截图可以看到私钥和证书,公钥要如何查看呢? 结合openssl 可以查看公钥。关于OpenSSL,可以参考 SSL/TLS 工具 OpenSSL。在命令行输入如下命令:
keytool -list -rfc -keystore my.keystore -storepass 111111 -alias mykey | openssl x509 -inform pem -pubkey
, 显示的效果如下:
-genkey
和-genkeypair
的关系是怎样的呢?
这两个都是产生密钥对,公钥和私钥。
在Java 1.6之前使用的是 genkey, 之后改名为genkeypair , 但是genkey也可以继续使用。
网络上很多文章说genkey只产生私钥的说法是错误的,只产生密钥(也就是私钥使用)使用genkey。
使用Java代码如何获取keystore文件的内容呢?
.keystore 是二进制文件,使用文本编辑器无法查看,Java提供了相关的类可以从二进制库文件中获取条目相关的信息, 包括私钥和公钥等:
@Test public void readKeyStore() throws Exception { String keyStoreFilePath = "D:\\xxx\\my.keystore"; \\证书库的路径 String keyStorePass = "111111"; String keyPass = "111111"; FileInputStream fis = new FileInputStream(new File(keyStoreFilePath)); KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(fis, keyStorePass.toCharArray()); // 遍历密钥库中的条目 Enumeration<String> aliaes = keystore.aliases(); while (aliaes.hasMoreElements()) { String alias = aliaes.nextElement(); // 私钥 Key key = keystore.getKey(alias, keyPass.toCharArray()); System.out.println("私钥:"); System.out.println(Base64.getEncoder().encodeToString(key.getEncoded())); // 证书: 包含公钥 Certificate[] certs = keystore.getCertificateChain(alias); for (Certificate cert : certs) { PublicKey puk = cert.getPublicKey(); System.out.println("公钥:"); System.out.println(puk); } } }
该代码运行的效果如下:
这篇关于java keytool 深入理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?