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

我可以为客户端和服务器Java SSL使用相同的自签名证书吗,java,security,ssl,networking,jsse,Java,Security,Ssl,Networking,Jsse,服务器 System.setProperty("javax.net.ssl.trustStore", "herong.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "HerongJKS"); 如果你想安全的话就不要。您已将服务器的私钥泄漏给客户端。我看不出为什么不能在客户端和服务器上使用相同的密钥库 这只取决于您的用例,如果这样做是明智的 顺便说一句:我想你误解了信任库和密钥库的概念。它们都出现在每个jre中。 它们

服务器

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

如果你想安全的话就不要。您已将服务器的私钥泄漏给客户端。

我看不出为什么不能在客户端和服务器上使用相同的密钥库

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

顺便说一句:我想你误解了信任库和密钥库的概念。它们都出现在每个jre中。
它们之间的唯一区别是它们存储了什么。(用于信任存储的受信任CA的公钥,以及用于密钥存储库的所有其他公钥和私钥)

您不是同一个人。。。“客户端和服务器的证书”,您对服务器密钥库和客户端信任库使用相同的JKS文件,这两个文件具有不同的用途

Java允许truststore包含一个或多个私钥条目,并使用该条目中的叶证书作为信任锚;看


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

证书应该唯一地标识对等方。共享密钥库无法实现这一点。它还侵犯了私钥隐私。
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");