Ssl 如何使用javafx14/HTTP2/JDK-8211308让javafxwebview继续加载带有自签名证书的页面

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尝试加载自签名网页时,它们不会加载,不再调用自定义

有谁能告诉我,在更新到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之间


通过查看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)