gpt4 book ai didi

ssl - 如何让 JavaFX WebView 继续使用 JavaFX 14/HTTP2/JDK-8211308 加载带有自签名证书的页面

转载 作者:行者123 更新时间:2023-12-04 22:36:52 25 4
gpt4 key购买 nike

谁能告诉我如何在更新到 JavaFX 14 后继续在 WebView 中使用自签名 https 证书显示网页?

在 JavaFX 14 之前,我们一直通过使用 HttpsURLConnection.setDefaultSSLSocketFactoryHttpsURLConnection 实现自定义 TrustHandlerHostnameVerifier 来处理此问题。 setDefaultHostnameVerifier.

当我切换到 JavaFX 14 并且 WebView 尝试加载自签名网页时

  • 它们不加载,
  • 不再调用自定义 TrustHandler 代码,并且
  • 我从 webView.getEngine().getLoadWorker().getException() 得到这个:
      java.lang.Throwable: SSL handshake failed  
     at javafx.web/javafx.scene.web.WebEngine$LoadWorker.describeError(WebEngine.java:1431)
     at javafx.web/javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1370)
     at javafx.web/javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1231)
     at javafx.web/com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2514)
     at javafx.web/com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2359)
     at javafx.web/com.sun.webkit.network.URLLoaderBase.twkDidFail(Native Method)
     at javafx.web/com.sun.webkit.network.HTTP2Loader.notifyDidFail(HTTP2Loader.java:624)
     at javafx.web/com.sun.webkit.network.HTTP2Loader.lambda$didFail$18(HTTP2Loader.java:606)
     at javafx.web/com.sun.webkit.network.HTTP2Loader.lambda$callBackIfNotCanceled$10(HTTP2Loader.java:437)
     at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
     at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
     at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
     at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
     at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
     at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
     at java.base/java.lang.Thread.run(Thread.java:830)

我在 JavaFX 13.0.2 上没有问题,但在 14 或 14.0.1 上却失败了。奇怪的是,如果我针对 OpenJDK 运行最高 11.0.2,即使使用 JavaFX 14 也没有问题,但问题出现在 12 到 15ea20 之间。

通过查看 JavaFX 和 JDK 的发行说明,我认为唯一可能的原因是 JDK-8211308 - Support HTTP/2 in WebView .这意味着不再使用 JDK 的 URLConnection 类,我猜这可能会导致它不再使用我的自定义 TrustHandler。

如果我是正确的,那么我需要知道如何继续使用我的自定义 TrustHandler 来处理在 WebView 下发起的连接,但我无法从 java.net.http 中的 API 中看到如何做到这一点。

或者增强描述提到:

a Runtime property will be provided to fallback to legacy HTTP API

但我找不到其他关于此的提及 - 我如何使用此后备?或者是否有其他方法让 WebView 允许使用自签名证书?还是我对 JavaFX 14 发生的变化有误,还有其他一些解决方案?

最佳答案

我发现 -Dcom.sun.webkit.useHTTP2Loader=false 禁用了 HTTP2 支持,并修复了这个问题。

关于ssl - 如何让 JavaFX WebView 继续使用 JavaFX 14/HTTP2/JDK-8211308 加载带有自签名证书的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61500650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com