Java SSL证书验证
假设我编写了两个Java应用程序:Ping.jar
并且Pong.jar
它们被部署并在两个单独的服务器上运行(Ping.jar
部署到srv-01.myorg.com
和Pong.jar
部署到srv-02.myorg.com
),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。
- 我(Java程序员)如何编码
Ping
并Pong
验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful APIHttpClient
?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗?
当我在网上搜索此内容时,我发现几乎没有出现,这让我感到惊讶。
回答:
如果使用Java SE SSL /
TLS类(例如SSLSocket
或SSLEngine
)进行连接,则使用Java安全套接字扩展(JSSE)。
它会根据验证对方的证书SSLContext
是用于创建此SSLSocket
或SSLEngine
。
这SSLContext
将与初始化TrustManager
是听写信任如何建立。
除非您需要特定的配置,否则您通常可以依靠默认值:这将依靠PKIX算法(RFC
3280)根据一组信任锚(cacerts
默认情况下)来验证证书。cacerts
Oracle
JRE随附的JKS是JKS密钥库,您可以在其中添加其他证书。例如,您可以显式添加证书keytool
。
您还可以以X509TrustManager
编程方式基于自定义密钥库创建一个,并将其用于SSLContext
不影响默认密钥库的特定密钥库中。
除此之外,如果您使用自己的协议,则需要验证所获得的证书是否与您要查找的主机名匹配(请参阅RFC
6125)。通常,您可以在获得的主题中查找主题替代名称X509Certificate
(从中获取链中的第一个对等证书SSLSession
),否则,请CN
在主题可分辨名称中查找RDN。
以上是 Java SSL证书验证 的全部内容, 来源链接: utcz.com/qa/426803.html