Java SSL证书验证

假设我编写了两个Java应用程序:Ping.jar并且Pong.jar它们被部署并在两个单独的服务器上运行(Ping.jar部署到srv-01.myorg.comPong.jar部署到srv-02.myorg.com),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。

  • 我(Java程序员)如何编码PingPong验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API HttpClient?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗?

当我在网上搜索此内容时,我发现几乎没有出现,这让我感到惊讶。

回答:

如果使用Java SE SSL /

TLS类(例如SSLSocketSSLEngine)进行连接,则使用Java安全套接字扩展(JSSE)。

它会根据验证对方的证书SSLContext是用于创建此SSLSocketSSLEngine

SSLContext将与初始化TrustManager是听写信任如何建立。

除非您需要特定的配置,否则您通常可以依靠默认值:这将依靠PKIX算法(RFC

3280)根据一组信任锚(cacerts默认情况下)来验证证书。cacertsOracle

JRE随附的JKS是JKS密钥库,您可以在其中添加其他证书。例如,您可以显式添加证书keytool

您还可以以X509TrustManager编程方式基于自定义密钥库创建一个,并将其用于SSLContext不影响默认密钥库的特定密钥库中。

除此之外,如果您使用自己的协议,则需要验证所获得的证书是否与您要查找的主机名匹配(请参阅RFC

6125)。通常,您可以在获得的主题中查找主题替代名称X509Certificate(从中获取链中的第一个对等证书SSLSession),否则,请CN在主题可分辨名称中查找RDN。

以上是 Java SSL证书验证 的全部内容, 来源链接: utcz.com/qa/426803.html

回到顶部