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

时间:2017-06-02 15:03:05

标签: java security ssl networking jsse

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");

3 个答案:

答案 0 :(得分:0)

如果您希望它安全,请不要。您已将服务器的私钥泄露给客户端。

答案 1 :(得分:0)

我没有看到您无法在客户端和服务器上使用相同密钥库的原因。

这只取决于您的用例,如果这样做是明智的。

BTW:我认为你误解了truststore和keystore的概念。每个jre都有它们。 它们之间的唯一区别是它们存储的。 (信任库的可信CA的公钥,以及密钥库的所有其他公钥和私钥)

答案 2 :(得分:0)

您没有为客户端和服务器提供相同的...证书,您正在为服务器 JKS文件 > keystore 和客户端 truststore ,它们是不同用途的不同内容。

Java确实允许信任库包含私钥条目(或条目),并使用该条目中的叶子证书作为信任锚点;见Does JSSE use a certificate in a PrivateKeyEntry as a trust anchor?

这样可以更容易泄露您的私钥并使您的系统不安全。提取服务器的锚证书是更好的做法,对于自签名证书本身就是证书本身,并且只将证书(而不是私钥)放在客户端的信任库中。