当前位置: 首页 > 面试题库 >

Java SSLSocket:如何发送完整的服务器证书链?

薄伟彦
2023-03-14
问题内容

当我在Java
7中创建SSLServerSocket时,服务器正确使用了我的服务器证书和密钥。该证书是由ca的子ca颁发的。因此,从根证书到服务器证书的完整链有四个证书。完整的链位于密钥库/信任库中。

但是,当客户端连接服务器时,服务器始终只会自己发送服务器证书。这也适用于基于Java的Web服务器,例如Jetty。

因为大多数客户端仅安装了根ca证书,而没有安装两个子ca证书,所以这是一个大问题。

如何强制Java在SSL / TLS握手中发送完整的证书链?


问题答案:

密钥库中的密钥条目不仅针对单个证书,而且还针对证书链(请参阅KeyStore.setKeyEntry,使用Certificate[] chain参数)。

如果要使用特定的链,则需要在具有证书及其私钥的条目中将其设置为链。中间证书是否也位于相同的密钥库中,位于不同的条目中并不重要。

这与让客户发送完整的客户证书链非常相似。从服务器的角度来看,相同的密钥库配置步骤也应该起作用,如本问题所述。



 类似资料:
  • 问题内容: 一般来说,我从GoDaddy获得了3个文件: 主证书文件 服务器私钥 捆绑文件 通过以下方式在Go服务器中配置了所有这些文件: 网络服务器运行正常,当前发布在。 我使用验证了我的SSL ,它的响应是 您可以转到此链接查看所有详细结果。 我想念什么? 问题答案: 在该线程之后,并从doc中开始: 如果证书是由证书颁发机构签名的,则certFile应该是服务器证书,任何中间件和CA证书的串

  • 我正在尝试使用UiPath发送SMTP邮件消息。 对于我的gmail帐户,我使用以下详细信息: 我有一些不太安全的应用程序,没有输入错误,我已经用Python脚本尝试过了,它很有效。 但是,在UiPath Studio上,我总是得到这个错误: 我很高兴得到任何提示。谢谢

  • 我陷入了与一个带有SSL服务器和客户端证书保护的API的服务提供商的指指点点的匹配中。 我生成了一个CSR,从一个公共CA(本例中为GoDaddy)获得了一个证书,并将证书和CA链提供给服务提供商。 他们应该已将CA和我的客户端证书加载到他们的网关中。 我正在使用进行最基本的测试 提供商告诉我,他们的日志建议我的请求根本不包括客户端SSL证书。 奇怪的是,在SSL握手期间提供的“可接受的客户端证书

  • 我已经编写了小型Java 7客户端和服务器应用程序。我有3个自签名的X.509 RSA证书的密钥库。当客户端通过SSL连接时,服务器只发送一个证书的SSL证书消息。我对SSL/TLS有点陌生。我还研究了JSSE代码sun。安全ssl。X509KeyManagerImpl,并找到以下注释: 评论很清楚,服务器将发送单个最佳匹配证书,但我似乎不理解原因。就像在我的例子中一样,我希望服务器发送所有3个证

  • null openssl pkcs12-export-in cert1.pem-inkey privkey1.pem-out cert_and_key.p12-name certificate-cafile fullchain1.pem-caname root keytool-importKeystore-destStorePAS5W0RD123-destKeypass Pas5w0rd123-d

  • 问题内容: 在以前的Express版本中,我可以这样做: 但是,在较新版本的express中,此功能不再起作用: 我应该打电话来设置证书吗?如果可以,怎么办? 问题答案: 请参阅Express文档以及https.createServer的Node文档(express建议使用的文档): createServer的其他选项位于:http : //nodejs.org/api/tls.html#tls_