Java http客户端无法在Azure上使用https

wyyhbhjk  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(167)

我正在尝试修复我的(有点)旧的(更)Java 11应用程序,该应用程序使用OKHttp 3客户端连接到API而没有问题。
API(我无法控制)已切换到不同的SSL证书,标识为:issuer: C=US; O=DigiCert, Inc.; CN=GeoTrust Global TLS RSA4096 SHA256 2022 CA1
这就是我试图通过命令行通过Curl访问它时得到的结果,我得到的响应和以前一样。
然而,我的Java http客户端SSL握手在azureedge.net CN上一直卡住,导致服务器没有被验证,出现以下异常:

ERROR  [dsa] javax.net.ssl.SSLPeerUnverifiedException: Hostname myhostname.com not verified:
    certificate: sha256/Nvgcs5yexn04uRMOx3YIN1w7gT+OS4b+WlGC8kHEiqQ=
    DN: CN=*.azureedge.net, O=Microsoft Corporation, L=Redmond, ST=WA, C=US
    subjectAltNames: [*.azureedge.net, *.media.microsoftstream.com, *.origin.mediaservices.windows.net, *.streaming.mediaservices.windows.net]

我怀疑它与Azure IoT中心有关,但是-不知道如何解决这个问题。
任何帮助都是非常感谢的。

j2datikz

j2datikz1#

在我绞尽脑汁数小时之后找到解决方案的线索是,所有的Java客户端都没有正确地获得证书,而且它似乎与在客户端中开箱即用的SNI有关。
我不确定这是不是我正在使用的JVM,但http客户端正在使用的扩展似乎默认关闭。添加简单的:

System.setProperty("jsse.enableSNIExtension", "true");

在任何https调用之前完成。

相关问题