Ssl 如何使用javafx14/HTTP2/JDK-8211308让javafxwebview继续加载带有自签名证书的页面
有谁能告诉我,在更新到JavaFX14后,如何在WebView中使用自签名https证书继续显示网页 在JavaFX 14之前,我们通过使用HttpsURLConnection.setDefaultSSLSocketFactory和HttpsURLConnection.setDefaultHostnameVerifier实现自定义TrustHandler和HostnameVerifier来处理这个问题。当我切换到JavaFX 14,WebView尝试加载自签名网页时,它们不会加载,不再调用自定义的TrustHandler代码,我从webView.getEngine().getLoadWorker().getException()获得了此代码: 我对JavaFX13.0.2没有问题,但它在14或14.0.1中失败了。奇怪的是,如果我在11.0.2之前运行OpenJDK,即使JavaFX14也没有问题,但问题发生在12到15ea20之间Ssl 如何使用javafx14/HTTP2/JDK-8211308让javafxwebview继续加载带有自签名证书的页面,ssl,javafx,webview,http2,self-signed,Ssl,Javafx,Webview,Http2,Self Signed,有谁能告诉我,在更新到JavaFX14后,如何在WebView中使用自签名https证书继续显示网页 在JavaFX 14之前,我们通过使用HttpsURLConnection.setDefaultSSLSocketFactory和HttpsURLConnection.setDefaultHostnameVerifier实现自定义TrustHandler和HostnameVerifier来处理这个问题。当我切换到JavaFX 14,WebView尝试加载自签名网页时,它们不会加载,不再调用自定义
通过查看JavaFX和JDK的发行说明,我认为唯一可能的原因是JDK-8211308-在WebView中支持HTTP/2。这意味着不再使用JDK的URLConnection类,我猜这可能会导致它不再使用我的自定义TrustHandler。如果我是正确的,然后,我需要知道如何继续使用我的自定义TrustHandler处理在WebView下启动的连接,但我看不到如何从java.net.http中的API执行此操作。另外,增强描述提到“将提供运行时属性以回退到遗留http API”,但是我找不到其他关于这一点的提及-我如何使用此回退?或者是否有其他方法让WebView允许自签名证书?或者我对JavaFX 14的更改是错误的,还有其他解决方案?我发现
-Dcom.sun.webkit.useHTTP2Loader=false
禁用了对HTTP2的支持,并解决了这个问题
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)