确定以两种方式使用哪个证书ssl

问题描述:

我在通过Web服务调用期间将证书(客户端)发送到其他服务器时出现问题。确定以两种方式使用哪个证书ssl

我们有望回归与CN证书:每当我们收到的服务器证书

b2b-test 
然而

,并试图发送我们自己,我们得到:

Unable to find valid certificate path to requested target 

从我的理解是,如果我将我们的证书b2b-test放入我们的密钥仓库jre/lib/security/cacerts中,那么当接收到服务器请求时,它应该发送相应的证书。

客户端如何知道密钥库中哪些密钥应该发送给服务器?我是否应该指定在我的请求期间发送的确切证书,还是足够让它在密钥库中?

目前服务器发送回证书

b2b-a 

证书链显示:

*** Certificate chain 
chain [0] = [ 
[ 
    Version: V3 
    Subject: CN=b2b-a, OU=Web Technologies 

该服务的网址是:

https://b2b-a/service 

如果我配置它一样一种方法ssl,并将服务器证书放入我们的cacerts,然后它拿起他们的证书a nd握手失败(我假设,因为它期待我们的证书,而不是他们回来,因为它是一个双向安装)。

我在这里有点难住。任何澄清我所说的是不胜感激。

当一方通过另一方不信任链中的任何证书的证书时,通常会出现“找不到有效证书路径以请求目标”错误。您通常会(总是)在接收证书的一侧(缺少信任库的一侧)看到错误消息。

如果你是客户端,他们是服务器,单向SSL将他们的证书从他们发送给你,你会验证它(确保主机名与证书中的内容匹配),但它不会向你发送任何证书,也不会做任何验证。

您需要确保您配置的信任库包含b2b-证书或用于签名的证书(但该证书似乎没有任何根CA,所以您'坚持直接导入证书本身)。所以是的,你想做你在帖子中写的东西,并把他们的证书放入你的cacerts。而且您还需要确保b2b服务信任您要发送的证书(或者用于签署证书的根CA(如果有的话)),因此您需要将证书放入其中cacerts,或者做一些相同的事情。

请注意,将证书放入cacerts(或在信任库JKS中)不会将任何证书发送给任何人;任何信任库只有允许您验证您信任别人为您提供的证书,无论是因为您信任证书,还是因为您信任用于签署证书的CA证书。没有从cacerts目录中选择发送到另一台机器的证书。

如果您使用的是JKS而不是JRE目录(这通常是一个更好的主意,因为您可以为您的过程指定一组不同的可信任证书,而无需更改您的内部运行Java项目的任何人的默认设置JRE),可以将相同的JKS用作密钥库和信任库(您只需为密钥库和信任库属性提供相同的文件名和密码),或者可以有两个单独的文件;这两种方法都可行。

从我的理解,如果我把我们的证书B2B检验我们的密钥库的jre/lib/security中/ cacerts中,接收服务器请求,则时,应发送适当的证书内。

当然不是。这是一个信任库。可信证书的来源。不要惹它。它不是用于您所需的目的,并且无论如何它都会更新每个Java dot版本,这会更改您的更改。

自己的证书和公钥/私钥对应该在自己的文件中去,一个密钥库,这是由javax.net.ssl.keyStorejavax.net.ssl.keyStorePassword系统属性定义为JSSE,或由JSSE参考描述的更复杂的手段指南。

密钥库包含您的私钥的宝贵和机密文件。守护并保护它。私钥泄漏会危害您的安全和身份。