如何解决如何在不破坏完整性检查的情况下对包装好的 jar 进行数字签名?
我有一个用 maven 构建的 java 项目。在打包阶段,代码被构建到一个 jar 中(maven-jar-plugin 3.1.1)并被包装成一个 .exe(launch4j-maven-plugin 1.7.25)强>)
我的部分代码将 .exe 作为文件系统打开以获取资源。具体来说,使用java.nio.file.FileSystems.newFileSystem(URL url),传入exe
这个文件系统正确地识别出我的文件确实是一个包装好的 jar,并读取它。
当我尝试对我的 .exe 文件进行数字签名时,这一切都失败了。对其进行数字签名后,我无法再将 exe 作为文件系统在 Java 中打开。我将范围缩小到的特定错误位于 ZipFileSystem.java:991
// Now scan the block backwards for END header signature
for (int i = buf.length - ENDHDR; i >= 0; i--) {
if (buf[i+0] == (byte)'P' &&
buf[i+1] == (byte)'K' &&
buf[i+2] == (byte)'\005' &&
buf[i+3] == (byte)'\006' &&
(pos + i + ENDHDR + ENDCOM(buf,i) == ziplen)) { -- this check fails. We find the header name,but the size check fails.
因此,对 .exe 文件进行数字签名会为我的文件大小增加一些字节,并导致 jar 文件的完整性检查始终失败。我曾尝试在包装 (jarsigner) 之前对 jar 进行签名,然后使用高级安装程序和 Jsign 对 exe 进行签名,但未能解决此问题。
将 jar 包装在一个 exe 中,然后对其进行签名,导致 java.nio.file.FileSystems 无法读取 jar。我能做些什么来解决这个问题?是否有签名者知道更新 jar 的完整性检查值?任何帮助表示赞赏
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。