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

Java SSL证书验证

韦睿
2023-03-14
问题内容

假设我编写了两个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。



 类似资料:
  • 问题内容: 我正在尝试通过调用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

  • 我正在用以下组件构建自己的证书链: 根证书是自签名证书,中间证书由根证书和用户由中间证书签名。 现在我想验证一个用户证书是否有其根证书的锚。 具有 验证是可以的。在下一步中,我将使用 验证结果显示 什么是错的?

  • - 我运行了此脚本,但出现了此错误。我怎么做?

  • 问题内容: 尝试运行Discord机器人时,遇到此错误: 它刚刚开始无处不在,并且每次都在发生。 我在Windows 10上使用python 3.8 这是什么意思,我该如何解决? 问题答案: 要解决此问题: 使用Internet Explorer转到discord.com(以管理员身份运行) 点击右上角的锁 点击查看证书 安装一个 PS:如果您的防病毒软件对Web浏览器有效,并且此解决方案不起作用

  • 问题内容: 我想在通过内部公司链接向服务器发出请求时忽略。 使用python库,我可以这样做: 如何使用urllib2库做同样的事情? 问题答案: 同时,urllib2似乎默认情况下会验证服务器证书。过去显示 的警告在2.7.9中消失了,我目前在具有自签名证书(和Python 2.7.9)的测试环境中遇到此问题。 我evil的解决方法(在生产中不要这样做!): 根据文档,直接调用SSLContex