Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JKS中存储TrustedCertEntry和PrivateKeyEntry的后果?_Java_Tomcat_Ssl_Keytool_Jks - Fatal编程技术网

Java 在JKS中存储TrustedCertEntry和PrivateKeyEntry的后果?

Java 在JKS中存储TrustedCertEntry和PrivateKeyEntry的后果?,java,tomcat,ssl,keytool,jks,Java,Tomcat,Ssl,Keytool,Jks,我最近加入了一个项目,该项目有一个在Tomcat中运行的应用程序,它使用一个文件作为密钥库和信任库。换句话说,它包括trustedCertEntry和PrivateKeyEntry类型的条目 当从Tomcat 8.5.6升级到8.5.20时,我意识到catalina.out给了我很多 java.lang.IllegalArgumentException: java.security.KeyStoreException: Cannot store non-PrivateKeys 解决方案是从密钥

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

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

java.lang.IllegalArgumentException: java.security.KeyStoreException: Cannot store non-PrivateKeys
解决方案是从密钥库中删除trustedCertEntry条目


对我来说,这似乎是相当明显的,你会想保持这些分开。我的问题是,使用同一个文件作为密钥库和信任库是否会产生任何可能的安全后果?如果是这样,为什么Java(或SSL)允许将它们保存在同一个文件中?

SSL和TLS是可互操作的协议;根据IETF的政策和传统,他们没有提到任何东西或任何端点的存储。“那是当地的事。”

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


Tomcat 8.5 sorta有点结合了Java JSSE和APR=OpenSSL堆栈之前单独的和(通常令人困惑的)不同的配置,我认为,密钥库只能包含私钥的限制是这种更改的结果。

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