我可以为客户端和服务器Java SSL使用相同的自签名证书


keytool -genkey -keyalg RSA -alias tomcat -keystore selfsigned.jks -validity <days> -keysize 2048

我使用此生成了一个密钥库。

我可以为客户端和服务器使用相同的密钥库吗?

客户端

System.setProperty("javax.net.ssl.trustStore", "herong.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "HerongJKS");

服务器

System.setProperty("javax.net.ssl.keyStore", "herong.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "HerongJKS");

我看不出您不能在客户端和服务器上使用相同的密钥库的原因。

明智的做法仅取决于您的用例。

btw:我认为您误解了TrustStore和Keystore的概念。他们俩都有每个JRE。它们之间的唯一区别是它们存储的内容。(信托店的CAS的公共钥匙,以及密钥库的所有其他公共和私人钥匙(

您不是'我们的'us [ing] centerr and Server',您正在使用相同的 jks file em> keystore 和客户端 truststore ,它们是不同的目的。

Java确实允许TrustStore包含一个私有键条目(或条目(,并在该条目(IES(中使用叶子证书作为信托锚点;请参阅JSSE是否将私人关键的证书用作信托锚?

这确实使您更容易泄漏您的私人关键并使您的系统不安全。提取服务器的锚定证书是更好的做法,对于自签名证书是证书本身,仅将证书(而不是私有关键(放入客户的信托店。

如果您要它安全。您已将服务器的私钥泄漏到客户端。

最新更新