Tomcat 9服务器:javax.net.ssl.SSLHandshakeException:空服务器证书链
我正在尝试建立到tomact服务器的ssl连接,我已在本地计算机上安装了该服务器。 server.xml包含以下条目:Tomcat 9服务器:javax.net.ssl.SSLHandshakeException:空服务器证书链,java,tomcat,tomcat9,java-security,Java,Tomcat,Tomcat9,Java Security,我正在尝试建立到tomact服务器的ssl连接,我已在本地计算机上安装了该服务器。 server.xml包含以下条目: <Connector protocol="org.apache.coyote.http11.Http11NioProtocol" port="8443" maxThreads="200" scheme="https" secure="true
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
sslImplementationName="localSSLImplementation keystoreFile="~/localhost.p12"
keystorePass="myPassword"
keystoreType="PKCS12"
truststoreFile="~/truststore.p12"
truststorePass="changeit"
truststoreType="PKCS12"
truststoreProvider="SUN"
clientAuth="required" sslProtocol="TLS" sslEnabledProtocols="TLSv1.1,TLSv1.2"/>
请参阅Dave的评论。我刚刚发现,我看到的堆栈跟踪说
certificate\u unknown
是因为客户端不信任我的服务器的证书,它是一个自签名证书。
这很正常,因为我的浏览器不信任本地证书。如果它是由授权CA签名的,那么这将解决问题。
keystrefile=“~/localhost.p12”
:Java不理解~
。试着把它放在Tomcat安装目录中,并提供相对于bin
drectory的路径,Tomcat在执行时就在那里。我已经提供了正确的路径。出于保密目的,我在此处披露时修剪了完整路径。如果服务器要使用自签名证书(和密钥),证书必须添加到客户端的信任库中,而不是服务器。把它放进你自己的信托库就像我试图通过把一张写着“戴夫是总统”的纸放进口袋来指挥美国军队一样。在第二种情况下,您的浏览器似乎确实信任服务器的证书,但在服务器请求时(在客户端验证服务器证书之后),您没有提供客户端证书和密钥。感谢您的提示。你能告诉我如何要求我的浏览器提供客户端证书和密钥吗?如果我使用的是openssl客户端,我应该在哪里找到它的信任库或为它指定证书密钥对?该证书是否已从我的Java的cacerts证书列表中验证?Dave您的指针确实帮助我解决了第二个问题,在这种情况下,我将自签名证书添加到了chrome中。但首先,我仍然能够在tomcat服务器的日志中看到与我发布的第一个堆栈跟踪完全相似的堆栈跟踪。所以现在我的查询是,我已经在服务器的信任库中导入了同一个根,该根已经签署了我的客户端证书。那么为什么我会看到javax.net.ssl.SSLHandshakeException:Received fatal alert:certificate\u unknown
?你能帮我吗?