Java 可以将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

我们有一个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 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服务的服务器的证书自签名。