- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一个 android 应用程序移植到 javaFX 以进行 windows 部署,我是 javaFX 和桌面部署的新手,但对 java 不是那么新。
该应用程序包含一个 WebView,该 WebView 加载通过 Json 从服务器获取的 url(因此基本上可以是任何内容)。
openJDK 14、openJfx 16、intellij idea ultimate 2021.1.3、gradle:插件:org.beryx.jlink 和 org.openjfx.javafxplugin
当我在开发和测试中(在 Windows 10 机器上)运行该程序时,这工作正常,但是当它被打包并部署在 Windows 机器(到目前为止的任何 Windows 10)上时,我得到一个“java.lang.Throwable : SSL handshake failed”页面加载时出现异常。
这是堆栈跟踪:
[ERROR] 2021-07-14 14:13:53.737 [JavaFX Application Thread] MediaElementWeb - WebView Failed:
java.lang.Throwable: SSL handshake failed
at javafx.scene.web.WebEngine$LoadWorker.describeError(WebEngine.java:1440) ~[javafx.web:?]
at javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1379) ~[javafx.web:?]
at javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1240) ~[javafx.web:?]
at com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2524) ~[javafx.web:?]
at com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2369) ~[javafx.web:?]
at com.sun.webkit.network.URLLoaderBase.twkDidFail(Native Method) ~[javafx.web:?]
at com.sun.webkit.network.URLLoader.notifyDidFail(URLLoader.java:799) ~[javafx.web:?]
at com.sun.webkit.network.URLLoader.lambda$didFail$6(URLLoader.java:782) ~[javafx.web:?]
at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447) ~[javafx.graphics:?]
at java.security.AccessController.doPrivileged(AccessController.java:391) ~[?:?]
at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:446) ~[javafx.graphics:?]
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) ~[javafx.graphics:?]
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[javafx.graphics:?]
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) ~[javafx.graphics:?]
at java.lang.Thread.run(Thread.java:832) [?:?]
该问题不特定于任何特定证书,所以我知道这不是一般证书的问题,经过许多站点的测试。我只在已部署的应用程序中收到此错误。
页面正在以标准方式加载:WebEngine.load(targetURL);
我正在捕获错误:
tNode.getEngine().getLoadWorker().stateProperty().addListener((o, ov, nv) -> {
if (nv == Worker.State.FAILED) {
logger.error("WebView Failed: ", tNode.getEngine().getLoadWorker().getException());
}
});
我已经搜索并尝试了其他人提供的似乎遇到过类似错误的解决方案,例如:
在调用 load(page) 之前设置信任管理器:
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (GeneralSecurityException e) {
logger.error("SSLContext Failed: ", e);
}
(这里没有错误或影响)
和
在部署中设置 JVMarg
-Dcom.sun.webkit.useHTTP2Loader=false
我可以看到在堆栈跟踪中显示了“com.sun.webkit.network.URLLoader”的效果,而不是 http2(如在其他线程上所建议的那样),但这里也没有变化。
有没有人对问题可能是什么以及如何解决有任何想法(记住我是 Java 桌面部署的新手)?
非常感谢
更新:
Trace from console on deployed test https://pastebin.com/R5SkR4w1
前几行:
javax.net.ssl|WARNING|2C|URL-Loader-1|2021-07-15 10:46:45.991 BST|SignatureScheme.java:295|Signature algorithm, ed25519, is not supported by the underlying providers
javax.net.ssl|WARNING|2C|URL-Loader-1|2021-07-15 10:46:45.992 BST|SignatureScheme.java:295|Signature algorithm, ed448, is not supported by the underlying providers
javax.net.ssl|WARNING|2C|URL-Loader-1|2021-07-15 10:46:45.995 BST|NamedGroup.java:297|No AlgorithmParameters for x25519 (
"throwable" : {
java.security.NoSuchAlgorithmException: Algorithm x25519 not available
at java.base/javax.crypto.KeyAgreement.getInstance(KeyAgreement.java:192)
at java.base/sun.security.ssl.NamedGroup.<init>(NamedGroup.java:286)
at java.base/sun.security.ssl.NamedGroup.<clinit>(NamedGroup.java:184)
at java.base/sun.security.ssl.SignatureScheme.<clinit>(SignatureScheme.java:59)
at java.base/sun.security.ssl.SSLSessionImpl.<clinit>(SSLSessionImpl.java:823)
at java.base/sun.security.ssl.TransportContext.<init>(TransportContext.java:133)
at java.base/sun.security.ssl.TransportContext.<init>(TransportContext.java:103)
at java.base/sun.security.ssl.SSLSocketImpl.<init>(SSLSocketImpl.java:111)
at java.base/sun.security.ssl.SSLSocketFactoryImpl.createSocket(SSLSocketFactoryImpl.java:72)
at java.base/sun.net.www.protocol.https.HttpsClient.createSocket(HttpsClient.java:413)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:162)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:265)
at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:372)
at ...
最佳答案
通过@slaw 关于我最初尝试但最终没有正确实现的建议的有用评论设法解决了这个问题,并从@dave_thompson_085 获得了如何提供额外调试信息的帮助。因此,解决方案以及对同船人员的一些提示:
<强>1。解决方案:
用于 Java 14 和 JavaFX 16 的 Intellij IDEA 上 gradle 的 Badass Jlink 插件未正确合并安全提供程序类。这已通过将“jdk.crypto.ec”添加到合并模块列表来解决。
<强>2。手动添加模块
org.beryx.jlink 插件 (2.24.0) 非常复杂且功能强大,因此我很难弄清楚如何在我的实现中做到这一点。
我尝试了很多组合,但以下代码在我的 build.gradle 中为我完成了:
jlink {
//... Other jlink \ jpackage stuff
mergedModule {
additive = true
requires 'jdk.crypto.ec'
}
//... Other jlink \ jpackage stuff
}
<强>3。为 windows 调试打包的 java 二进制文件
一些 Jlink 配置更改在此过程中有所帮助。
jlink {
//..
jpackage {
//..
imageOptions = [
"--win-console"
]
}
//..
launcher {
jvmArgs = ['-Dcom.sun.webkit.useHTTP2Loader=false','-Djavax.net.debug=ssl:handshake']
}
}
--win-console 在您启动程序时打开一个控制台窗口,以便您可以看到注销
-Djavax.net.debug=ssl:handshake 提供了有关 SSL 过程和握手的更多信息,因此您可以看到发生了什么。
关于ssl - javafx 16 Web 引擎异常 "SSL Handshake failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68379520/
我正在从不同来源获取新闻提要并添加到数据库,但我遇到异常 Error: Cannot enqueue Handshake after already enqueuing a Handshake. at
嘿,大家好,我只是想制作一个简单的表单,将数据发送到 mySQL 数据库。我的问题是提交后我无法再提交另一份。它只允许我提交表单一次,然后在第二次提交后,我收到此错误“错误:在已经排队握手后无法排队握
我正在尝试将 VisualVM 连接到远程 JMX。 IntelliJ 可以轻松连接,但 VisualVM 失败并在日志输出中显示以下内容: Listening for transport dt_so
我每 5 秒查询一个表并向用户显示。我使用的是mysql 8。应用程序是nodejs。 var con = mysql.createConnection({ host: "localhost",
我正在尝试创建两个函数,一个从 SQL 数据库检索对象,另一个将对象保存到同一个 SQL 数据库。我使用 node.js 和 mysql 来执行此操作。我有两个函数,fetchEmployee 和 E
我正在尝试通过运行命令 ./mvnw compile quarkus:dev 来调试基本的 Quarkus 应用程序在 IntelliJ 上(如 Quarkus 文档中所述)并且它似乎运行正常(给我以
我正在开发一个由 IIS 10 托管的 .Net Core (3.1) Web 应用程序。当我尝试在本地主机上使用 SignalR 时,我能够完全正常连接并从后端接收消息,但是在我将其发布到 IIS
我最近从 AWS ELB 切换到 HAProxy。我正在负载均衡器 (HAProxy 1.5dev19) 上终止 SSL。 自切换以来,我不断在 HAProxy 日志中收到一些 SSL 连接错误(占请
我编写了一个系统,可以自动在 Microsoft Azure 上部署 VM,在上面安装 Sql Server,然后针对新安装的服务器执行 .sql 脚本以初始化环境。周五,这一切都按预期进行。今天,我
我尝试使用 Hyperledger 版本 2.0.0 将我的 Golang 后端连接到正在运行的 Hyperledger 网络... 我在运行“docker-compose up”时看到这个 Serv
我在安装我们的内部产品时遇到 SSL 配置问题。安装在jboss-eap-6.1.上,使用java-1.7.0-openjdk-1.7.0.85.x86_64 日志说: 16:28:11,685 DE
我做到了 import requests url = "https://randomuser.me/api/" data = requests.get(url).json() print data 我
我正在运行为 HTTP/2 客户端提供的代码 Jetty https://github.com/eclipse/jetty.project/blob/master/jetty-http2/http2-
我需要在使用命名管道与其他进程通信的小型 Linux 程序中实现握手类型协议(protocol)。我已经在使用命名管道时搜索了握手类型协议(protocol)的一般实现模式,但我无法打开任何东西...
我安装了 Docker 版本“Docker 版本 19.03.8,构建 afacb8b”,当我尝试使用 docker pull 命令时,如“docker pull mcr.microsoft.com/
我正在使用 python asynchat 来实现网络协议(protocol)。在连接时,我需要发送命令,服务器通过 session 进行应答。 我的主要问题是我需要等待直到收到 session 响应
握手完成后,我在握手时调用 getPeerCertificates() (socket.getHandshakeSession()) 我正在使用 setNeedClientAuth(true)在服务器
我在 logstash-forward 和 logstash 之间有问题,我已经正确安装了 SSL 证书,但是我有这个错误: Failed to tls handshake with 111.111.
本文整理了Java中us.ihmc.robotDataLogger.handshake.YoVariableHandshakeParser类的一些代码示例,展示了YoVariableHandshake
我是 R 语言的新手 并且正在使用 RConnection 在 java 中尝试一个简单的程序,但它给出了这个异常 org.rosuda.REngine.Rserve.RserveException:
我是一名优秀的程序员,十分优秀!