Java trustStore和keyStore的区别
如果您是Java开发人员,并且曾经使用过Java SSL/TLS,您可能会遇到trustStore和keyStore这两个术语。这两个文件用于存储加密密钥和证书。直到Java 8,这些文件的默认格式是JKS。随着Java 9的发布,默认格式更改为PKCS12。在本文中,我们将讨论Java中trustStore和keyStore的区别。
trustStore vs keyStore
trustStore
这是一个包含客户端信任的自签名证书集合的文件。其中包含的证书是受信任的证书颁发机构(CA),用于为其他服务器发行证书。trustStore在SSL身份验证期间验证其他服务器的身份和真实性。首先,服务器从其keyStore中搜索关联的密钥,并将公钥和证书显示给客户端。然后,客户端从trustStore中搜索关联的证书,以检查外部服务器提供的证书或证书颁发机构是否在我们的trustStore中。如果存在,则连接将成功建立,否则我们将收到SSLHandshakeException。
要指定trustStore的类型和密码,我们需要设置以下属性:
- javax.net.ssl.trustStorePassword 和
-
javax.net.ssl.trustStoreType
keyStore
这是一个包含发送方或客户端的私钥、密钥和带有公钥的证书的文件。在SSL握手期间,客户端和服务器使用这些密钥和证书来验证消息和发送方的身份。首先,服务器查找私钥,然后将与之关联的公钥和证书显示给客户端。类似于此,客户端还通过显示公钥和证书来进行身份验证。整个过程被称为相互认证。公钥执行数据的加密,私钥执行数据的解密。
类和方法
- java.security.KeyStore: 这是一个用于创建和操作密钥库的类。它提供了几种内置方法,用于加载、保存、添加、删除和枚举密钥库条目。
-
javax.net.ssl.keyStore: 用于指定keyStore的类型。
-
javax.net.ssl.keyStorePassword: 用于指定密码的类型。
-
setEntry(): 这是一个将条目添加到指定密钥库的方法。
-
aliases(): 此方法枚举密钥库中的所有条目,并返回表示密钥库所有别名的字符串枚举。
到目前为止,我们已经了解了trustStore和keyStore的定义和工作原理。在下一节中,我们将讨论这些存储之间的区别。
trustStore和keyStore的区别
下表总结了上述讨论中trustStore和keyStore之间的区别:
trustStore | keyStore |
---|---|
它包含我们可以信任的外部服务器的证书。 | 它包含我们应用程序的密钥和证书。 |
存储在其中的密码可以被任何人读取。 | 存储在其中的密码只能被特定成员读取。 |
在客户端设置连接时需要。 | 在服务器端设置连接时需要。 |
trustStore不包含任何私密数据。 | keyStore包含客户端的私密数据。 |
它被TrustManager使用。 | 它被KeyManager使用。 |
结论
现在,我们讨论的结束了,让我们快速总结一下在本文中讨论过的内容。当我们尝试与第三方应用程序进行通信时,trustStore和keyStore的概念被使用。keyStore充当着一个安全存储设施,用于保存用于身份验证的加密密钥。trustStore用于信任我们将要通信的第三方。