加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – signed jar file- jnlp无法提示用户接受证书

发布时间:2020-12-14 19:36:32 所属栏目:Java 来源:网络整理
导读:我是业余程序员.我创建了一个由单个自签名jar文件组成的应用程序.该应用程序将仅供我的数学课程中的学生使用,因此我认为自签名是可以的. 我按照Oracle的说明对jar进行了签名,然后使用jarsigner工具来验证jar.据说,这很好. 在.jnlp文件中,我包含了具有所有权
我是业余程序员.我创建了一个由单个自签名jar文件组成的应用程序.该应用程序将仅供我的数学课程中的学生使用,因此我认为自签名是可以的.

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

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

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

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

我在stackoverflow上读过这个页面:

JNLP get a permission

我有一个类似的情况,我得到一个安全例外.在我的情况下,当应用程序尝试显示filechooser对话框时抛出异常:

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

这是因为从未要求用户提供权限.我相信我遵循了stackoverflow页面上的建议,但它似乎对我不起作用.这就像jar似乎是无符号的.我甚至尝试删除所有权限标记并获得完全相同的行为.

我查看了jar内部,我可以看到两个必需的文件在那里:MYKEY.DSA和MYKEY.SF.我查看了可读的(.SF)内部,它包含应该存在的文本.我相信这是所有罐子需要才能签署.

所以这是我的问题:

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?

谢谢你的帮助.正如我在开始时所说,我是一名业余程序员.我真正想做的就是为下周的课程做好准备.

更新:

在使用无法找到libjli.so的jar工具挣扎了很长时间后,我现在已成功使用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时,jar是用1.6创建的吗?

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

解决方法

在回答您的具体问题时:

>它由jar签名工具自动处理,不要出名.>除非服务器正在编译代码,否则服务器的Java版本不相关.但即便如此,Java应用程序.应该是’向前兼容’. I.E.一个应用程序编译为1.5,应运行在1.5,1.6& 1.7 ..>我不认为jar签名者工具在文件编写中做了任何不同的事情,因为它是第一次制作的,所以版本是无关紧要的.>基于第(3)点不相关.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读