假设我编写了两个Java应用程序:ping.jar
和pong.jar
,它们在两个独立的服务器上部署和运行(ping.jar
部署到srv-01.myorg.com
和pong.jar
部署到srv-02.myorg.com
- 我,一个Java程序员,如何编码
ping
和pong
来验证彼此的SSL证书?每个CA是否都提供某种RESTful API,例如HttpClient
?Java有自己的证书验证API吗?是否有可以使用的开源第三方JAR或服务?
我很惊讶,当我在网上搜索这个时,发现的东西是如此之少。
如果使用Java SE SSL/TLS类(例如SSLSocket
或SSLEngine
)进行连接,则使用Java安全套接字扩展(JSSE)。
它将根据用于创建此SSLSocket
或SSLEngine
的SSLContext
验证远程参与方的证书。
此SSLContext
将使用TrustManager
初始化,该SSLContext
指示如何建立信任。
除非需要特定的配置,否则通常可以依赖于默认值:这将依赖于PKIX算法(RFC 3280)根据一组信任锚(默认情况下在cacerts
中)来验证证书。Oracle JRE附带的cacerts
是一个JKS密钥存储库,您可以向其添加额外的证书。例如,可以使用keytool
显式添加证书。
您还可以基于自定义密钥库以编程方式创建X509TrustManager
(如本答案所述),并在不影响默认密钥库的特定SSLContext
中使用它。
此外,如果您使用自己的协议,则需要验证所获得的证书是否与所要查找的主机名相匹配(参见RFC6125)。通常,您可以在获取的X509Certifice
中查找主题替代名称(从SSLSession
获取链中的第一个对等证书),否则,在主题可分辨名称中查找CN
RDN。
问题内容: 假设我编写了两个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:无法获取本地颁发者证书