Как заставить JavaFX WebView продолжать загружать страницу с самозаверяющим сертификатом с помощью JavaFX 14 / HTTP2 / JDK-8211308 - PullRequest
1 голос
/ 29 апреля 2020

Может кто-нибудь сказать мне, как я могу продолжать отображать веб-страницы, используя самозаверяющий сертификат https в WebView после обновления до JavaFX 14?

До JavaFX 14 мы работали с этим путем реализации пользовательского TrustHandler и HostnameVerifier с использованием HttpsURLConnection.setDefaultSSLSocketFactory и HttpsURLConnection.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. Любопытно, что нет проблем даже с JavaFX 14, если я работаю с OpenJDK до 11.0.2, но проблема возникает с 12 до 15ea20.

При просмотре заметок о выпуске для JavaFX и JDK, единственной вероятной причиной, по-моему, является JDK-8211308 - поддержка HTTP / 2 в WebView. Это подразумевает переход от использования класса JDK URLConnection, и я предполагаю, что это может привести к тому, что он больше не будет использовать мой собственный TrustHandler. Если я прав, то мне нужно знать, как продолжать использовать мой собственный TrustHandler для подключений, инициированных ниже WebView, но я не вижу, как это сделать из API в java. net .http. В качестве альтернативы в описании расширения упоминается «свойство среды выполнения для перехода к устаревшему HTTP API», но я не могу найти никакого другого упоминания об этом - как мне использовать этот запасной вариант? Или есть какой-то альтернативный способ заставить WebView разрешать самозаверяющие сертификаты? Или я не прав насчет того, что изменилось с JavaFX 14 и есть какое-то другое решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...