Java 可以将CA(客户端)颁发的证书与自签名证书(服务器)通信吗?
我们有一个java web应用程序(客户端),它可以调用具有自签名证书的站点(服务器)的web服务。当我们从日志文件执行调用时,我们的证书由CA颁发:Java 可以将CA(客户端)颁发的证书与自签名证书(服务器)通信吗?,java,web-services,ssl,tls1.2,sslhandshakeexception,Java,Web Services,Ssl,Tls1.2,Sslhandshakeexception,我们有一个java web应用程序(客户端),它可以调用具有自签名证书的站点(服务器)的web服务。当我们从日志文件执行调用时,我们的证书由CA颁发: default task-24, SEND TLSv1.2 ALERT: fatal, description = certificate_unknown default task-24, WRITE: TLSv1.2 Alert, length = 2 [Raw write]: length = 7 0000: 15 03 03 00 02
default task-24, SEND TLSv1.2 ALERT: fatal, description = certificate_unknown
default task-24, WRITE: TLSv1.2 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 03 00 02 02 2E .......
default task-24, called closeSocket()
default task-24, handling exception: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target`enter code here`
default task-24, called close()
我们的应用服务器是Wildfly 10,我们使用Spring Ws调用Web服务。
在我们的密钥库中有我们调用的服务器站点的自签名证书
在此错误之前,我们有一个自签名证书客户端,它调用自签名证书服务器,它工作正常
假设我们现在有一个CA颁发的证书,我们需要将新证书传递给服务器部件,以便继续使用它们的Web服务
非常感谢
考虑到我们现在有一个CA颁发的[客户端]证书,我们是否需要将新证书传递给服务器以继续使用他们的Web服务
假设服务器依赖于客户端证书,那么是的
当您开始设置时,您会执行以下操作
现在,您已将客户端的证书更改为由适当CA颁发的证书。服务器可以检查此证书是否有效,但这不足以让服务器知道客户端“在列表中”。要建立后者,您需要向服务器注册新的客户端证书,或者您需要告诉服务器接受CA颁发的任何客户端证书作为“在列表中”。(您需要决定哪一个更适合您的用例。)我解决了这个问题,我在我们的机器中的文件“.jre/lib/security/jssecacert”(WILDFLY使用的是jre)中添加了整个链的证书(从https站点下载,这是我们调用web服务的服务器)。在此之前,我在server.log中看到:“信任库是:/usr/lib/jdk1.8.0_111/jre/lib/security/jssecacerts”。现在我们的客户端应用程序(站点https和CA证书)正确调用服务器的Web服务(第三方证书自签名)早上好,但我不明白,因为在我们的WILDFLY的standalone.xml中,我们有一个密钥库,它没有我们称之为Web服务的服务器的证书自签名。