Com*_*sci 2 ssl javafx webview jlink java-platform-module-system
我在嵌入窗口中显示网页时遇到问题,但仅在创建独立的 jlinked 包且仅适用于某些 https 站点时。
我按照https://openjfx.io/openjfx-docs/#install-javafx上的说明创建了一个简单的模块化应用程序,并且从命令行运行时效果很好
java --module-path "%PATH_TO_FX%;mods" -m uk.co.comsci.testproj/uk.co.comsci.testproj.Launcher
Run Code Online (Sandbox Code Playgroud)
但在使用命令 jlink 之后
jlink --module-path "%PATH_TO_FX_MODS%;mods" --add-modules uk.co.comsci.testproj --output launch
Run Code Online (Sandbox Code Playgroud)
并与运行
launch\bin\java.exe -m uk.co.comsci.testproj/uk.co.comsci.testproj.Launcher
Run Code Online (Sandbox Code Playgroud)
javaFx 场景打开,但只是一个空白屏幕...我必须使用任务管理器来终止应用程序。
如果我将 URL 更改为其他 https 站点,则显示正常。
我想这取决于某处的安全设置和策略,但我不知道从哪里开始。
我尝试使用 WireShark 进行监控,这表明当从 java 运行并且它可以工作时,它会执行一些 TLSv1.3 操作来建立连接。当作为 jlinked 包运行时,它只执行 TLSv1.2 的操作。也许有线索?
这是我的 SSCE:
模块信息.java
module uk.co.comsci.testproj {
requires javafx.web;
requires javafx.controls;
requires javafx.media;
requires javafx.graphics;
requires javafx.base;
exports uk.co.comsci.testproj;
}
Run Code Online (Sandbox Code Playgroud)
启动器.java
java --module-path "%PATH_TO_FX%;mods" -m uk.co.comsci.testproj/uk.co.comsci.testproj.Launcher
Run Code Online (Sandbox Code Playgroud)
主应用程序.java
jlink --module-path "%PATH_TO_FX_MODS%;mods" --add-modules uk.co.comsci.testproj --output launch
Run Code Online (Sandbox Code Playgroud)
非常感谢任何帮助。
好的。终于追踪到了。因此,如果有人遇到同样的问题:
与 JavaFx 或 Webview 无关,这是 TLS 握手失败。
用 http 客户端 get 替换 webview
String uri = "https://test-api.service.hmrc.gov.uk/oauth/authorize"
+ "?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A8084%2Fredirect"
+ "&state=lFuLG42uri_aAQ_bDBa9TZGGYD0BDKtFRv8xEaKbeQo"
+ "&client_id=tASN6IpBPt5OcIHlWzkaLXTAyMEa&scope=read%3Avat+write%3Avat";
var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder()
.GET()
.uri(URI.create(uri))
.timeout(Duration.ofSeconds(15))
.build();
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("REsponse " + response.body());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
并使用 '-Djavax.net.debug=ssl:handshake:verbose' 运行表明握手失败。运行嵌入式 keytool -showinfo -tls 并将其与系统 keytool 输出进行比较表明 jlinked 输出不支持 TLS_ECDHE_... 密码
从这里进行一些谷歌搜索和帮助https://www.gubatron.com/blog/2019/04/25/solving-received-fatal-alert-handshake_failure-error-when-performing-https-connections-on-a- custom-made-jre-with-jlink/显示我需要做的就是添加
requires jdk.crypto.cryptoki;
Run Code Online (Sandbox Code Playgroud)
到我的 module-info.java :-)
归档时间: |
|
查看次数: |
371 次 |
最近记录: |