JAVA语言原生证书管理

Java语言有一套与openssl不同的独有的管理方式,很多概念有所差异。读者可以通过该文章入门及熟悉相关操作。

1 keytool的概念

keytool 是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。在JDK 1.4以后的版本中都包含了这一工具,它的位置为%JAVA_HOME%\bin\keytool.exe
在这里插入图片描述

2 keytool的用法

在这里插入图片描述

创建证书

创建证书主要是使用" -genkeypair",该命令的可用参数如下:
在这里插入图片描述
范例:生成一个名称为test1的证书
Cmd代码

keytool -genkeypair -alias "test1" -keyalg "RSA" -keystore "test.keystore"

功能:
创建一个别名为test1的证书,该证书存放在名为test.keystore的密钥库中,若test.keystore密钥库不存在则创建。
参数说明:
-genkeypair:生成一对非对称密钥;
-alias:指定密钥对的别名,该别名是公开的;
-keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
-keystore:密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件
在这里插入图片描述
注意:
1.密钥库的密码至少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等等
2."名字与姓氏"应该是输入域名,而不是我们的个人姓名,其他的可以不填
执行完上述命令后,在操作系统的用户目录下生成了一个"test.keystore"的文件,如下图所示:  
在这里插入图片描述

查看密钥库里面的证书

范例:查看test.keystore这个密钥库里面的所有证书
Cmd代码

keytool -list -keystore test.keystore
导出证书文件

范例:将名为test.keystore的证书库中别名为test1的证书条目导出到证书文件test.crt中
Cmd代码

keytool -export -alias test1 -file test.crt -keystore test.keystore

运行结果:在操作系统的用户目录(gacl)下生成了一个"test.crt"的文件,如下图所示:

导入证书

范例:将证书文件test.crt导入到名为test_cacerts的证书库中
Cmd代码:

keytool -import -keystore test_cacerts -file test.crt
查看证书信息

范例:查看证书文件test.crt的信息
Cmd代码:

keytool -printcert -file "test.crt"
删除密钥库中的条目

范例:删除密钥库test.keystore中别名为test1的证书条目
Cmd代码:

keytool -delete -keystore test.keystore -alias test1
修改证书条目的口令

范例:将密钥库test.keystore中别名为test2的证书条目的密码修改为xdp123456
Cmd代码:

keytool -keypasswd -alias test2 -keystore test.keystore

3 实践操作

在采用netty进行双向TLS验证的通信时,可以采用keytool进行证书的生成,参考代码
Netty实现TLS通信

生成Netty服务端自签名证书
keytool -genkey -alias securechat -keysize 2048 -validity 365 -keyalg RSA -dname "CN=localhost" -keypass sNetty -storepass sNetty -keystore sChat.jks

解释:
genkey 生成密钥对
-alias securechat 别名为securechat
-keysize 2048 密钥长度
-validity 365有效期
-keyalg RSA 生成的公私钥对算法
-dname “CN=localhost” 证书域名
-keypass sNetty 私钥加密密钥
-storepass sNetty 存储文件密钥
-keystore sChat.jks 存储文件

生成Netty服务端自签名客户端证书
keytool -genkey -alias smcc -keysize 2048 -validity 365 -keyalg RSA -dname "CN=localhost" -keypass cNetty -storepass cNetty -keystore cChat.jks

与上述服务端证书命令一致,只是存储文件不同。证书别名不同。

导出服务端端证书文件

keytool -export -alias securechat -keystore sChat.jks -storepass sNetty -file sChat.cer
-export 导出证书文件的动作,需要口令才能打开该文件,导出的证书作为公开信息,就是都可以读的了;
-alias securechat 指定导出的具体证书
-keystore sChat.jks 指定服务端的证书文件
-storepass sNetty 指定导出时需要的口令
-file sChat.cer 指定最终存储的文件

将服务端导出的证书文件导入到客户端的可信证书链中
keytool -import -trustcacerts -alias securechat -file sChat.cer -storepass cNetty -keystore cChat.jks 

-import 导入动作
-trustcacerts 导入可信证书链
-alias securechat 导入可信证书链后的证书别名
-file sChat.cer 导入的证书的文件来源
-storepass cNetty 读写客户端证书文件需要的口令
-keystore cChat.jks 最终存入的客户端证书文件

导出客户端证书文件
keytool -export -alias smcc -keystore cChat.jks -storepass cNetty -file cChat.cer
将客户端导出的证书文件导入到服务端的可信证书链中
keytool -import -trustcacerts -alias smcc -file cChat.cer -storepass sNetty -keystore sChat.jks
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值