将请求发送到应用程序时不显示 SSL 证书

将请求发送到应用程序时不显示 SSL 证书

我有一个 java 密钥库,其中已安装 2 个证书链。 CSR 由 CA 生成并签名,并且安装了具有相应 CA 的证书。但是,当我向端口上的应用程序发送请求时,仅显示一个证书,但我希望显示密钥库中的两个证书,以便我可以根据首选证书进行身份验证。

我需要这方面的帮助

答案1

旁白:CA 不签署 CSR;它签署了一个证书,该证书是部分地基于企业社会责任,但部分不是(这两部分都很重要)。

你说 'A企业社会责任已产生”。如果您确实创建了一个 CSR(针对一个密钥)并为该 CSR 获取了两个证书(每个可能带有链),并将两个证书链安装到商店中的一个私钥条目中,那么第二个证书链将替换第一个证书链,您只需您的商店里有第二个。

我假设您生成了两个私钥和两个 CSR(每个密钥一个),并且对于每个 CSR 都有一个证书链并将其安装到相应的私钥,因此您实际上有两个具有不同证书链的私钥并且希望查看两者。如有疑问,请keytool -list [-v]进行检查。

SSL(现在的 TLS)协议不会这样做;服务器仅发送一个“实体”(服务器)证书及其链证书(如果有),并在一次握手中证明相应的私钥。

可能能够执行两个请求,每个请求都会得到您想要的证书链:

  • 如果证书具有不同的主题/SAN 名称,并且您的客户端使用 SNI 扩展(最近的浏览器会这样做,但其他软件可能会也可能不会),那么 Java 8 服务器将更喜欢与 SNI 匹配的证书。大多数客户端(但不是 OpenSSL!)始终使 SNI 与连接到的主机名相同,因此您可能需要(暂时?)更改名称解析以将多个主机名指向同一服务器,例如使用您的hosts文件或未绑定或类似的文件。

  • 如果证书适用于不同的密钥类型(RSA、DSA、EC),并且客户端仅提供使用一种密钥类型的密码套件,则 Java 服务器将使用该密钥类型的证书。有些客户端允许您轻松控制所提供的密码套件,有些则不然。

  • 同样,如果证书链使用不同(多组)签名算法,并且客户端使用 SignatureAlgorithms 扩展实现 TLS1.2,则 Java 7+ 服务器将更喜欢满足 SigAlgs 的证书链。但我不知道有哪个客户端可以让您轻松选择 SigAlgs,而且 CA 几乎没有提供在其颁发的证书链中使用哪些签名算法的选择。

相关内容