Java 打包应用程序时不使用Trustmanager

Java 打包应用程序时不使用Trustmanager,java,javafx,jpackage,Java,Javafx,Jpackage,这让我抓狂:我有一个小的模块化JavaFX(TornadoFX)应用程序运行Java14。在让模块系统正常工作(多亏了坏家伙的JLink插件())之后,我现在正试图为它获得一个自包含的可执行文件。该插件使用jpackager生成可执行文件并运行,但不会对SSL连接使用(自定义)信任管理器 我有一些证书的小型自定义信任库文件。启动时会将其加载到密钥库中,而密钥库又用于创建自定义TrustManager实例。然后,自定义TrustManager和默认TrustManager组合为一个TrustMan

这让我抓狂:我有一个小的模块化JavaFX(TornadoFX)应用程序运行Java14。在让模块系统正常工作(多亏了坏家伙的JLink插件())之后,我现在正试图为它获得一个自包含的可执行文件。该插件使用jpackager生成可执行文件并运行,但不会对SSL连接使用(自定义)信任管理器

我有一些证书的小型自定义信任库文件。启动时会将其加载到密钥库中,而密钥库又用于创建自定义TrustManager实例。然后,自定义TrustManager和默认TrustManager组合为一个TrustManager,该TrustManager首先尝试使用自定义TrustManager验证证书,如果失败,则使用默认TrustManager重试

当从IDE运行应用程序时(gradle run),这可以正常工作。应用程序使用WebView显示远程登录页面,我可以在日志中看到TrustManager用于验证证书。在此之后,对某个端点进行Rest调用,并再次调用trustmanager来检查证书

但是,当我使用jpackager打包应用程序时,这不起作用。现在,由于一些模糊的原因,trustmanager只用于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
08:27:11.202[INFO][JavaFX应用程序线程]com.bmw.swhrl.dm.ui.view.LoginView-位置: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=
08:27:11.401[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:27:11.402[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-已存储
08:27:11.402[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:27:11.403[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:27:11.403[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:27:11.450[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-接受的发行人
08:27:11.680[信息][JavaFX应用程序线程]com.bmw.swhrl.dm.ui.view.LoginView-位置:http://localhost:8080/...
08:27:12.296[INFO][fx-thread-1]c.b.s.dm.ui.viewmodel.MainViewModel-请求:https://somewebsite/webapi/config
08:27:13.940[INFO][fx-thread-1]c.b.s.dm.ui.viewmodel.MainViewModel-请求:https://somewebsite/webapi/config
08:27:14.817[INFO][fx-thread-1]c.b.s.dm.ui.viewmodel.MainViewModel-请求:https://somewebsite/webapi/config
在Rest呼叫期间没有呼叫trustmanager

现在,版本从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
08:30:24.413[INFO][JavaFX应用程序线程]com.bmw.swhrl.dm.ui.view.LoginView-位置: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=
08:30:24.583[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:24.584[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-已存储
08:30:24.585[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:24.586[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:24.643[INFO][URL-Loader-1]com.bmw.swhrl.dm.util.TrustManager-接受发行人
08:30:24.936[信息][JavaFX应用程序线程]com.bmw.swhrl.dm.ui.view.LoginView-位置:http://localhost:8080/...
08:30:25.610[INFO][fx-thread-1]c.b.s.dm.ui.viewmodel.MainViewModel-请求:https://somewebsite/webapi/config
08:30:25.731[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-链
08:30:25.731[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:25.731[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:25.731[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-已存储
08:30:25.731[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:25.731[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:25.731[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-CN=
08:30:25.732[信息][TornadFX-thread-1]com.bmw.swhrl.dm.util.TrustManager-接受发行人
在这里,Rest调用也会调用trustmanager并建立连接

编辑:
我现在尝试将打包的运行时与安装在系统上的运行时进行比较,发现如果我将文件C:\Program Files\Java\jdk-14\lib\modules复制到打包的运行时lib\文件夹中,它就会工作。尽管如此,这并没有多大帮助,因为我不知道这个模块文件来自何处,也不知道为什么打包运行时附带的文件比我在系统范围内安装的文件大,但可能有人有主意。

这个问题帮助我解决了这个问题:

基本上,结果是缺少一些模块,例如jdk.crypto.ec或处理JSON序列化/反序列化的模块。我现在在jlink选项中添加了“-bind services”,看起来它正在工作