这让我抓狂:我有一个运行在Java14上的小型模块化JavaFX (TornadoFX)应用程序。在经历了许多让模块系统正常工作的麻烦之后(感谢Badass JLink插件(https://badass-jlink-plugin.beryx.org/releases/latest/)),我现在正试图为它获得一个自包含的可执行文件。该插件使用jpackager生成可执行文件并运行,但它不会为SSL连接使用(自定义)信任管理器。
我有一些带有证书的小型自定义信任库文件。它在启动时加载到密钥库中,该密钥库用于创建自定义TrustManager实例。然后,将自定义TrustManager和默认TrustManager合并到单个TrustManager中,该are首先尝试使用自定义TrustManager验证证书,如果验证失败,则使用默认are再次尝试。
当从IDE (gradle run)运行应用程序时,这会运行得很好。应用程序使用WebView显示远程登录页面,我可以在日志中看到TrustManager用于验证证书。在此之后,对某个端点进行Rest调用,并再次调用信任管理器来检查证书。
但是,当我使用jpackager打包应用程序时,这不起作用。现在,由于某种模糊的原因,信任管理器仅用于WebView建立的连接,而不用于Rest调用。
我已经比较了打包的运行库和IDE中使用的安全权限/策略,没有区别。
我真的对Java感到很失望。首先是模块系统的痛苦,现在是这个。我完全不知道问题出在哪里。
这是一些日志。首先是打包版本:
08:27:11.202 [INFO ] [JavaFX Application Thread] com.bmw.swhrl.dm.ui.view.LoginView - Location: https://somewebsite.org
08:27:11.400 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - Chain
08:27:11.401 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<cert>
08:27:11.401 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<cert>
08:27:11.402 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - Stored
08:27:11.402 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:27:11.403 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:27:11.403 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:27:11.450 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - Accepted issuers
08:27:11.680 [INFO ] [JavaFX Application Thread] com.bmw.swhrl.dm.ui.view.LoginView - Location: http://localhost:8080/...
08:27:12.296 [INFO ] [tornadofx-thread-1] c.b.s.dm.ui.viewmodel.MainViewModel - Request: https://somewebsite/webapi/config
08:27:13.940 [INFO ] [tornadofx-thread-1] c.b.s.dm.ui.viewmodel.MainViewModel - Request: https://somewebsite/webapi/config
08:27:14.817 [INFO ] [tornadofx-thread-1] c.b.s.dm.ui.viewmodel.MainViewModel - Request: https://somewebsite/webapi/config在Rest调用期间,没有对信任管理器的调用。
现在,该版本从IDE启动:
08:30:24.413 [INFO ] [JavaFX Application Thread] com.bmw.swhrl.dm.ui.view.LoginView - Location: https://somewebsite.org
08:30:24.582 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - Chain
08:30:24.583 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<cert>
08:30:24.583 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<cert>
08:30:24.584 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - Stored
08:30:24.585 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:30:24.586 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:30:24.643 [INFO ] [URL-Loader-1] com.bmw.swhrl.dm.util.TrustManager - Accepted issuers
08:30:24.936 [INFO ] [JavaFX Application Thread] com.bmw.swhrl.dm.ui.view.LoginView - Location: http://localhost:8080/...
08:30:25.610 [INFO ] [tornadofx-thread-1] c.b.s.dm.ui.viewmodel.MainViewModel - Request: https://somewebsite/webapi/config
08:30:25.731 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - Chain
08:30:25.731 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - CN=<cert>
08:30:25.731 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - CN=<cert>
08:30:25.731 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - Stored
08:30:25.731 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:30:25.731 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:30:25.731 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - CN=<stored cert>
08:30:25.732 [INFO ] [tornadofx-thread-1] com.bmw.swhrl.dm.util.TrustManager - Accepted issuers这里还为Rest调用调用了信任管理器,并建立了连接。
编辑:我现在已经尝试将打包的运行时与安装在我系统上的运行时进行了比较,我发现如果将文件C:\Program Files\Java\jdk-14\ lib\ modules复制到打包的运行时lib\文件夹中,它可以正常工作。尽管如此,这仍然没有太大的帮助,因为我不知道这个模块文件从哪里来,也不知道为什么打包的运行时附带的模块文件比我的系统范围安装中的模块文件大,但也许有人有一个想法。
发布于 2020-08-08 00:25:19
这个问题帮助我解决了这个问题:https://bugs.openjdk.java.net/browse/JDK-8221674
基本上,一些模块丢失了,例如jdk.crypto.ec或一些处理JSON序列化/反序列化的模块。我现在已经在jlink选项中添加了"--bind-services“,看起来它可以工作了。
https://stackoverflow.com/questions/63296261
复制相似问题