Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 使用.keystore文件使用tomcat 8.5配置SSL-无法存储非私钥_Java_Tomcat_Ssl - Fatal编程技术网

Java 使用.keystore文件使用tomcat 8.5配置SSL-无法存储非私钥

Java 使用.keystore文件使用tomcat 8.5配置SSL-无法存储非私钥,java,tomcat,ssl,Java,Tomcat,Ssl,我有一个tomcat(2).keystore文件,我把它放在/opt/tomcat/conf目录中。目录权限设置如下: root@xxxxxxxxxx:/opt/tomcat# ls -l total 112 drwxr-x--- 2 root tomcat 4096 Sep 10 03:04 bin drwxr-x--- 2 root tomcat 4096 Sep 28 05:12 conf drwxr-x--- 2 root tomcat 4096 Sep 10 03:0

我有一个tomcat(2).keystore文件,我把它放在
/opt/tomcat/conf
目录中。目录权限设置如下:

root@xxxxxxxxxx:/opt/tomcat# ls -l
total 112
drwxr-x--- 2 root   tomcat  4096 Sep 10 03:04 bin
drwxr-x--- 2 root   tomcat  4096 Sep 28 05:12 conf
drwxr-x--- 2 root   tomcat  4096 Sep 10 03:04 lib
-rw-r----- 1 root   tomcat 57092 Aug  2 21:36 LICENSE
drwxr-x--- 2 tomcat tomcat  4096 Sep 28 05:15 logs
-rw-r----- 1 root   tomcat  1723 Aug  2 21:36 NOTICE
-rw-r----- 1 root   tomcat  7064 Aug  2 21:36 RELEASE-NOTES
-rw-r----- 1 root   tomcat 15946 Aug  2 21:36 RUNNING.txt
drwxr-x--- 2 tomcat tomcat  4096 Sep 28 05:15 temp
drwxr-x--- 8 tomcat tomcat  4096 Sep 28 03:52 webapps
drwxr-x--- 3 tomcat tomcat  4096 Sep 10 03:19 work
server.xml
具有以下连接器:

<Connector 
    port="8080" 
    maxThreads="1000"

    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxHttpHeaderSize="8192"
    emptySessionPath="true"
    connectionTimeout="20000"  
    minSpareThreads="20"  
    acceptCount="100" 
    disableUploadTimeout="true" 
    enableLookups="false" 
    tcpNoDelay="true"

    scheme="https" 
    secure="true" 
    SSLEnabled="true"
    keystoreFile="/opt/tomcat/conf/tomcat (2).keystore" 
    keystorePass="xxxxxx"
    clientAuth="false" 
    sslProtocol="TLS" 
    maxPostSize="97589953"
    URIEncoding="UTF-8"/>
有人能帮忙吗?是否需要从
server.xml
中删除任何其他内容

编辑:


当我运行
/keytool-list-keystore”/opt/tomcat/conf/tomcat(2).keystore“

我相信您正在尝试在服务器上设置SSL支持。如果是这样,您的密钥库应该只包含您的私有证书。看起来里面有一些第三方公钥,或者您正在使用带有对称密钥的JKS密钥库。最好的办法是检查密钥库的内容。使用命令

keytool -list -keystore yourkeystorefilename

看看里面有什么。

我终于找到了问题所在。例外情况表明,
tomcat(2).keystore本身存在一些问题。因此,我使用
$JAVA_HOME/bin/keytool-list-keystore tomcat(2)检查了keystore中的证书。keystore
的输出是:

密钥库类型:JKS 密钥库提供程序:SUN

您的密钥库包含3个条目

root, Dec 19, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): xxxx
tomcat, Dec 19, 2016, PrivateKeyEntry, 
Certificate fingerprint (SHA1): xxxx
intermed, Dec 19, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): xxxxx
由于异常表明私钥以外的任何密钥都有问题,因此我使用以下方法删除了
trustedCertEntry

$JAVA_HOME/bin/keytool -delete -noprompt -alias intermed -keystore tomcat\ \(2\).keystore -storepass xxxxxx
$JAVA_HOME/bin/keytool -delete -noprompt -alias root -keystore tomcat\ \(2\).keystore -storepass xxxxx

然后重新启动tomcat。这解决了问题。感谢@Gautam和@EJP的帮助。

有点晚了,但我在迁移到tomcat 8.5.20后遇到了类似的问题。经过进一步的研究,我想出了一个单独的、合理的解决方案。在许多情况下,证书在生产环境中不在我们手中,因此不建议对其进行篡改。 实际上,从实现来看,tomcat似乎试图使用密钥存储文件中提到的第一个密钥,除非我们提供密钥别名。因此,在本例中,如果我们在连接器中提供密钥别名,它将正常工作


{keyalis=“tomcat”}

您的密钥存储库文件是只读的吗?Tomcat试图写入它对我来说是个新闻,我不知道它为什么会这样,但出于某种原因,它正在调用
setKeyEntry()
。@EJP是的,它是只读的。。。我应该增加权限吗?我想你应该试着让它读写,但我不知道为什么。@EJP现在我对.keystore文件的权限看起来像
-r--rw---1 ubuntu tomcat 7492 Sep 28 03:58 tomcat(2).keystore
,但我仍然遇到同样的错误。所以它根本找不到它。检查文件名和密码是否完全正确。将命令结果添加为编辑。有什么意义吗?没有公钥。我相信,
tomcat,2016年12月19日,PrivateKeyEntry,Certificate fingerprint(SHA1):xxxx
是您服务器的私钥。其他两个显示为可信证书的是什么?为什么在这个密钥库中需要它们。如果这些是针对您希望从应用程序调用的第三方终结点的,请将这些证书添加到
cacerts
。请详细说明您的答案并提供步骤/参考?在密钥库中拥有受信任的证书不会导致此错误。它们可能是CA根证书及其链。看起来@EJP是对的,这与密钥库中的公钥无关。将keystore设置为rw有效吗?看起来tomcat无法访问密钥库并发现密钥库为null。请参阅处的JSSEUtil源代码,如果密钥库为null,它将尝试创建内存中的密钥库并向其写入密钥。这就是调用
setKeyEntry
的地方此解决方案的问题是您刚刚删除的根密钥是您从CA收到的。你需要这些,这对我来说很有用。谢谢对于使用spring引导的嵌入式tomcat配置:server.ssl.key alias=alias
root, Dec 19, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): xxxx
tomcat, Dec 19, 2016, PrivateKeyEntry, 
Certificate fingerprint (SHA1): xxxx
intermed, Dec 19, 2016, trustedCertEntry, 
Certificate fingerprint (SHA1): xxxxx
$JAVA_HOME/bin/keytool -delete -noprompt -alias intermed -keystore tomcat\ \(2\).keystore -storepass xxxxxx
$JAVA_HOME/bin/keytool -delete -noprompt -alias root -keystore tomcat\ \(2\).keystore -storepass xxxxx