可以将CA(客户端)颁发的证书与“自签名”(服务器)证书进行通信吗?

时间:2018-06-20 12:43:38

标签: 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 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服务吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

  

鉴于我们现在拥有一个由CA颁发的证书 [针对客户端] ,我们是否需要将新证书传达给服务器以继续使用其Web服务?

假设服务器依赖客户端证书,则可以。

在开始设置时,您将完成以下操作。

  1. 为服务器创建一个自签名证书
  2. 为客户端创建一个自签名证书。
  3. (通常)通过将服务器的证书添加为客户端的密钥库中的受信任证书来向服务器注册服务器。
  4. (通常)通过将客户端的证书添加到客户端的密钥库中来向服务器注册客户端。

这告诉客户端信任该服务器是它声称的身份,并告诉服务器信任该客户端是它声称的身份。另外,它告诉服务器该客户端在客户端列表中,以接受来自该客户端的请求。

现在,您已将客户的证书更改为由适当的CA颁发的证书。服务器可以检查此证书是否有效,但这不足以使服务器知道客户端“在列表中”。要建立后者,您需要在服务器上注册新的客户端证书,或者需要告诉服务器接受CA颁发的任何客户端证书作为“在列表上”。 (您需要确定哪个更适合您的用例。)