Java中的KeyStore和TrustStore以及 keytool 命令的使用

当应用需要使用SSL/TLS进行通信时,我们将会使用到密钥库(keystore)和信任库(truststore)。
在 JDK8 之前,这些文件的默认格式为 JKS;从 JDK9 开始,默认格式为PKCS12。

JKS 和 PKCS12 的区别是:JKS 是 Java 特有的格式,而 PKCS12(Public Key Cryptography Standards, 公钥加密标准)是存储加密的私钥和证书的标准规范与语言无关。

KeyStore-密钥库

KeyStore 存储一个私钥和一个相关的证书,或者相关的证书链(由客户证书和一个或多个证书颁发机构(CA)证书组成)。存储时,使用别名存储。它通常用于表明通信一方的身份。

比如服务器使用 HTTPS,在 SSL 握手期间,服务器从密钥库中查找私钥,并将其对应的公钥和证书提供给客户端。

一般都是单向认证,如果要双向认证,即验证客户端的身份,那么客户端也需要有一个密钥库,并提供它的公钥和证书。

TrustStore-信任库

TrustStore 则相反,密钥库通常用于保存标识自身身份的证书,而信任库用于保存识别他人(第三方)身份的证书,用于校验与我们通信的第三方是否可信。

上面的例子中,客户端接收到服务器证书,会在自己的信任库中查找相关联的证书,如果这个认证不在自己的信任库中,将会抛出 SSLHandshakeException,连接建立失败。

JDK 中有个默认的信任库 cacerts,它位于 $JAVA_HOME/jre/lib/security 目录中。我们通过java后台程序使用https去访问其他第三方终端时,就是用这个cacerts信任库来校验第三方终端发送过来的证书。

keytool 工具的使用

1.创建自签名 CA,指定私钥别名为 root

keytool -genkey -alias root -keypass 123456 -keystore ca.ks -storepass 123456 -dname "CN=ca-root,OU=ou-ca,O=o-	ca,L=BJ,ST=BJ,C=CN"

2.创建客户端/服务端密钥库,别名为 client/server

keytool -genkey -alias client -keystore client.ks
keytool -genkey -alias server -keystore server.ks

分别生成证书签名请求(CSR)

keytool -certreq -alias client -keystore client.ks -keyalg rsa –file client.csr
keytool -certreq -alias server -keystore server.ks -keyalg rsa –file server.csr

3.使用 ca.ks 中别名为 root 的私钥为客户端/服务端颁发证书

keytool -gencert -keystore ca.ks -alias root -infile client.csr/server.csr -outfile client.cer/server.cer

4.证书导入形成证书链
首先,从 ca.ks 中生成 ca 证书

keytool -export -keystore ca.ks -alias root -file ca.cer

接着,将 ca.cer 分别导入到客户端/服务端密钥库,别名 root

keytool -import -keystore client.ks/server.ks -file ca.cer -alias root

然后,将 ca.ks 颁发的证书分别导入到客户端/服务端密钥库

keytool -import -keystore client.ks -file client.cer -alias client
keytool -import -keystore server.ks -file server.cer -alias server

最后,查看验证客户端和服务端密钥库

keytool -list -v -keystore client.ks/server.ks

5.创建 TrustStore-信任库

keytool -import -file ca.cer -alias firstCA -keystore cacerts.ts

查看信任库内容,可以看到它没有私钥,只存 ca 证书。在使用时,信任库可以用密钥库代替。

Java SSL Socket 编程实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转载自:https://www.goobye.net/showinfo-477-407962-0.html

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值