当前位置: 首页 > 知识库问答 >
问题:

Java中的SSL证书验证

鲁博雅
2023-03-14

假设我编写了两个Java应用程序:ping.jarpong.jar,它们在两个独立的服务器上部署和运行(ping.jar部署到srv-01.myorg.compong.jar部署到srv-02.myorg.com

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

我很惊讶,当我在网上搜索这个时,发现的东西是如此之少。


共有1个答案

全鸿晖
2023-03-14

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

它将根据用于创建此SSLSocketSSLEngineSSLContext验证远程参与方的证书。

SSLContext将使用TrustManager初始化,该SSLContext指示如何建立信任。

除非需要特定的配置,否则通常可以依赖于默认值:这将依赖于PKIX算法(RFC 3280)根据一组信任锚(默认情况下在cacerts中)来验证证书。Oracle JRE附带的cacerts是一个JKS密钥存储库,您可以向其添加额外的证书。例如,可以使用keytool显式添加证书。

您还可以基于自定义密钥库以编程方式创建X509TrustManager(如本答案所述),并在不影响默认密钥库的特定SSLContext中使用它。

此外,如果您使用自己的协议,则需要验证所获得的证书是否与所要查找的主机名相匹配(参见RFC6125)。通常,您可以在获取的X509Certifice中查找主题替代名称(从SSLSession获取链中的第一个对等证书),否则,在主题可分辨名称中查找CNRDN。

 类似资料:
  • 问题内容: 假设我编写了两个Java应用程序:并且它们被部署并在两个单独的服务器上运行(部署到和部署到),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。 我(Java程序员)如何编码并验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API ?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗? 当我

  • 问题内容: 我正在尝试通过调用HTTPS REST API 。在开发过程中,我偶然发现以下错误: 因此,我在Google上搜索了一下,并找到了很多可行的解决方案。 使用Jersey客户端的HTTPS https://gist.github.com/outbounder/1069465 如何解决“ java.security.cert.CertificateException:不存在使用者替代名称”

  • 我正在尝试通过调用HTTPS REST API。在开发过程中,我偶然发现了以下错误: 所以我用谷歌搜索了一下,找到了大量的解决方案,实际上是有效的。 使用泽西客户端的HTTPS https://gist.github.com/outbounder/1069465 如何修复java.security.cert.证书异常:不存在主题替代名称错误? http://www.mkyong.com/webse

  • 我正在开发一个应用程序,使用rest API将其连接到数据库,我的服务器有一个SSL证书,当我试图发送请求时,从我的反应本地应用程序显示此错误msg是有办法禁用SSL验证反应原生Android。 如果有人知道,帮忙。

  • 尽管我保留了verify=false,但在Python中还是出现了ssl错误。你能告诉我如何避免吗?但是curl命令使用-k选项。 错误:

  • 当我想要在cPanel上安装证书时,我会看到以下错误: 错误证书验证失败! 已执行/usr/bin/openssl verify-capath/var/cpanel/ssl/installed/cabundles: stdin:CN=example.com 0深度查找时错误20:无法获取本地颁发者证书