gpt4 book ai didi

java - 已签名的 jar 文件——jnlp 无法提示用户接受证书

转载 作者:搜寻专家 更新时间:2023-10-31 20:20:57 28 4
gpt4 key购买 nike

我是一名业余程序员。我创建了一个包含单个自签名 jar 文件的应用程序。该应用程序将仅供我数学课的学生使用,因此我认为自签名是可以的。

我按照 Oracle 说明对 jar 进行签名,然后使用 jarsigner 工具验证 jar。据说,这很好。

在 .jnlp 文件中,我包含了具有所有权限的安全标记:

    <security>
<all-permissions/>
</security>

但是,当程序启动时,我从未看到提示用户接受证书的对话框或要求获得某种许可才能在客户端计算机上运行。根据 Oracle 文档,我的理解是我应该看到这样一个对话框。

我已经在 stackoverflow 上阅读了这个页面:

JNLP get a permission

我遇到了类似的情况,因为我遇到了安全异常。在我的例子中,当应用程序试图显示文件选择器对话框时抛出异常:

java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)

这是因为从未要求用户提供许可。我相信我遵循了那个 stackoverflow 页面上的建议,但它似乎对我不起作用。就像 jar 似乎没有签名一样。我什至尝试删除所有权限标签并得到完全相同的行为。

我查看了 jar 里面,我可以看到里面有两个必需的文件:MYKEY.DSA 和 MYKEY.SF。我查看了可读文件 (.SF),它包含了应该存在的文本。我相信这就是签名所需的全部 jar 。

所以这是我的问题:

1) .DSA 和 .SF 文件的名称对于应用程序来说重要吗?目前他们只有我在 keytool 中使用的别名。

2) 如果我的服务器上的 java 版本是 1.7 而我的开发计算机上的 java 版本是 1.6 有什么关系吗?需要在1.6编译,因为我们学校还没有升级到1.7,所以在客户端运行时需要1.6。

3) 当我从终端运行它时,有没有办法确定我使用的是哪个版本的 jarsigner?我试过 jarsigner -version,但这不是选项之一。我注意到 MYKEY.SF 文件的顶部如下所示:

    Signature-Version: 1.0
Created-By: 1.4.2-02 (Blackdown Java-Linux Team)
SHA1-Digest-Manifest: OHMs6w/CQlG3MVYNxC7l1vTWdZw=

Name: org/arps/tranz/TranzActionMap.class
SHA1-Digest: dSI3RKfgUrRHbwnZLyXbkiJLWdU=

这是否意味着实际上有一些旧版本的 jarsigner 在运行?我不认为 Java 1.4 还在我的电脑上。无论如何,我的 jarsigner 版本似乎创建了与此处所见相同类型的文件:

http://docs.oracle.com/javase/tutorial/deployment/jar/intro.html

我不知道由 1.6 jarsigner 或 1.7 jarsigner 创建的文件是否看起来有任何不同,或者这是否重要。

4) 如果 jarsigner 的版本是罪魁祸首,我该如何强制从终端 (Ubuntu) 运行较新版本的 jarsigner?

感谢您的帮助。正如我一开始所说,我是一名业余程序员。我真正想做的就是为下周的类(class)做好准备。

更新:

用jar工具折腾了好久找不到libjli.so,现在我已经成功使用了1.6的jar工具和jarsigner工具,所以MYKEY.SF文件的顶部是这样的:

    Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: DGUFMaJYirZi//67NI+M5RVi63k=
Created-By: 1.6.0_03 (Sun Microsystems Inc.)
SHA1-Digest-Manifest: ZPS3aOyPW/tymxbGdfe4/qBVK/g=

但我仍然遇到相同的行为,即应用程序在不要求用户接受证书的情况下开始启动。所以现在我的主要问题是:

当我的服务器运行 1.7 时使用 1.6 创建 jar 有关系吗?

我不知道服务器上实际发生了多少 java Activity 。在某些时候,它会切换到客户端计算机,但我假设 jnlp 的一部分首先发生在服务器上。

最佳答案

回答您的具体问题:

  1. 它由 jar signer 工具自动处理,不用担心名称。
  2. 服务器的 Java 版本不相关,除非服务器正在编译代码。但即便如此,Java 应用程序。应该是“向前兼容的”。 IE。一个应用程序。在 1.5 中编译,应该在 1.5、1.6 和 1.7 中运行。
  3. 我不认为 jar signer 工具在文件写入方面有什么不同,因为它是第一次制作的,所以版本无关紧要。
  4. 根据第 (3) 点不相关。

关于java - 已签名的 jar 文件——jnlp 无法提示用户接受证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18679602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com