【问题标题】:Can I use the same self signed certificate for client and server Java SSL我可以为客户端和服务器 Java SSL 使用相同的自签名证书吗
【发布时间】:2017-06-02 15:03:04
【问题描述】:
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");

【问题讨论】:

    标签: java security ssl networking jsse


    【解决方案1】:

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

    这仅取决于您的用例是否明智。

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

    【讨论】:

    • 证书应该唯一标识对等方。共享的 KeyStore 无法做到这一点。它还侵犯了私钥隐私。
    【解决方案2】:

    您没有“为客户端和服务器使用相同的 ... 证书”,您正在为服务器 keystore 使用相同的 JKS 文件 和客户端 truststore,它们是具有不同目的的不同事物。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 1970-01-01
        • 2010-11-13
        • 2014-06-07
        • 2011-02-23
        • 1970-01-01
        • 1970-01-01
        • 2013-09-08
        相关资源
        最近更新 更多