【问题标题】:Consequences of storing TrustedCertEntry and PrivateKeyEntry in JKS?在 JKS 中存储 TrustedCertEntry 和 PrivateKeyEntry 的后果?
【发布时间】:2017-11-08 13:53:43
【问题描述】:

我最近加入了一个项目,该项目有一个在 Tomcat 中运行的应用程序,它使用单个文件作为 KeyStore 和 TrustStore。换句话说,它包括trustedCertEntry 和PrivateKeyEntry 类型的条目。

从 Tomcat 8.5.6 升级到 8.5.20 时,我意识到 catalina.out 给了我

java.lang.IllegalArgumentException: java.security.KeyStoreException: Cannot store non-PrivateKeys

解决方案是从密钥库中删除trustedCertEntry 条目。

对我来说,这似乎很明显,您希望将它们分开。我的问题是,使用同一个文件作为密钥库和信任库是否有任何可能的安全后果?如果是这样,为什么 Java(或 SSL)允许将它们保存在同一个文件中? p>

【问题讨论】:

  • 另一种解决方案是在 tomcat 连接器配置中提供特定于密钥存储文件中私钥的密钥别名。很多情况下,我们无法控制特别是在生产环境中使用的证书。

标签: java tomcat ssl keytool jks


【解决方案1】:

SSL 和 TLS 是可互操作的协议;根据 IETF 的政策和传统,他们对在任一端点或任何端点存储任何东西都只字未提。 “那是当地的事情。”

Java 历史上对 TrustedCert 和 PrivateKey 都使用一种文件格式 (JKS),不仅用于 SSL/TLS,还用于所有公钥加密(还可以选择使用 JCEKS 一些对称加密),并且 Java9 正在切换到 PKCS12 用于两者.使用相同的格式并不意味着您必须使用相同的文件,我会说最好使用单独的文件,但是只要您保留任何包含私钥仅限于一个系统,或绝对必要的少数系统,加上适当的备份;但这并不是真正的编程问题,您可能会尝试在 security.SX 上寻求更好的答案。

Tomcat 8.5 sorta-kinda 结合了 Java-JSSE 和 APR=OpenSSL 堆栈的先前独立且(通常令人困惑)不同的配置,我相信密钥库只能包含 PrivateKey 的限制是该更改的结果。

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2020-11-15
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多