首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带appletviewer的签名jar抛出权限异常

带appletviewer的签名jar抛出权限异常
EN

Stack Overflow用户
提问于 2012-01-12 23:47:49
回答 1查看 2K关注 0票数 2

我正在尝试解决一个问题,因为签名的jars无法在appletviewer下工作。我的主要目标是在浏览器之外运行它,所以我尝试使用appletviewer -如果您有其他建议,请告诉我。

以下是背景:

  • Ubuntu 11.10
  • 爪哇: $ java -version java版本"1.6.0_26“Java(TM) SE运行时环境(build 1.6.0_26-b03) Java HotSpot(TM) 64位服务器VM (build 20.1-b02,混合模式)

问题是:

  • 我有一个jar myjar.jar,其中包含一个applet。
  • 它在浏览器中正常工作,但在appletviewer下运行时却不能正常工作。
  • 该罐子签署如下: $ jarsigner -verify -certs -verbose -keystore /etc/ssl/certs/java/-certs myjar.jar .CN=xxx、OU=xxx、OU=xxx、O=xxx、L=xxx、ST=xxx、C=xxx证书从m/d/y h:m PM到m/d/y h:m PM X.509、CN=yyy、OU=yyy、OU=yyy、O=yyy、C=yyy证书在m/d/y h:m :m X.509、OU=zzz、O=zzz中有效。C=zzz (alias1)证书从m/d/y :m到m/d/y :m.查证了。

而且,虽然中间签名证书(上面的yyy)不存在,根签名证书(zzz -或alias1)是:

代码语言:javascript
复制
$ keytool -list -v -keystore /etc/ssl/certs/java/cacerts -storepass changeit|grep alias1
alias1, Mmm d, yyyy, trustedCertEntry,

运行此命令:

代码语言:javascript
复制
$ appletviewer myhtml.html

给予:

代码语言:javascript
复制
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission preferences)

问题集1:

  • 假设当根证书存在时,为了验证目的,所有以下中间证书都可以接受吗?在上述情况下,是否有必要在仙人掌文件中有yyy?
  • 当jar被签名时,就像myjar.jar一样,它是否假定appletviewer应该不受限制地运行?
  • 有更好的方法来运行它来避免这种情况吗?
  • 为什么它在浏览器中的工作方式与appletviewer不同呢?

由于不确定上面的内容,我尝试将证书添加到另一个名为cacerts2的本地文件中。我可以证实:

  • keytool在仙人掌中列出了证书。
  • jarsigner输出现在如下所示: -verify -certs -verbose -keystore cacerts2 myjar.jar ..。SMKX.509、CN=xxx、OU=xxx、OU=xxx、O=xxx、L=xxx、ST=xxx、C=xxx证书从m/d/y h:m PM到m/d/y h:m PM X.509、CN=yyy、OU=yyy、OU=yyy、O=yyy、C=yyy (alias2)证书从m/d/y :m到m/d/y h:m X.509、OU=zzz、O=zzz、C=zzz (alias1)证书从m/d/y :m到m/d/y :m.查证了。

请注意,现在输出中存在中间别名(yyy -或alias2),并针对alias1和alias2进行了验证。像这样运行appletviewer:

代码语言:javascript
复制
$ appletviewer -J-Djavax.net.ssl.trustStore=cacerts2 -J-Djavax.net.ssl.trustStorePassword=changeit myhtml.html

仍然会导致同样的异常。

问题集2:

  • 以上是提供信托商店的正确方式吗?
  • 上面的内容是否意味着appletviewer将以与jarsigner在传递-keystore命令进行验证时相同的方式使用它?

我尝试的第三件事是创建这样的策略文件(在mypolicy.policy中):

代码语言:javascript
复制
keystore "cacerts2";
// Tried with this and without the next line:
//keystorePasswordURL "cacerts.pass";
// where file cacerts.pass has only "changeit" / "changeit\n" in it (tried both)

// Tried the following three:
grant signedBy "alias1" {
//grant signedBy "alias2" {
//grant {
  permission java.lang.RuntimePermission "preferences";
};

像这样跑:

代码语言:javascript
复制
$ appletviewer -J-Djava.security.policy=mypolicy.policy myhtml.html

就像这样:

代码语言:javascript
复制
$ appletviewer -J-Djavax.net.ssl.trustStore=cacerts2 -J-Djavax.net.ssl.trustStorePassword=changeit -J-Djava.security.policy=mypolicy.policy myhtml.html

结果:

  • 格兰特在没有任何signedBy规范的情况下工作,所以我可以确认这个策略是被取走的。
  • 格兰特与signedBy之一都失败了

问题集3:

  • 这是指定策略和signedBy的正确方法吗?我发现甲骨文的文档在这个主题上是不完整的
  • 在jar被签名时甚至使用策略文件吗?
  • 还有其他的想法吗?)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-13 00:47:53

我的主要目标是在浏览器之外运行它。

使用Java Web Start,它可以在大约1.2天内启动小程序自由浮动。(或将代码转换为框架。)

如果这主要是测试,您可以尝试[医]苹果。从那时起,我就没有时间为它实现一个沙箱(因此,即使是未签名的applet代码也会表现得好像它是可信的)。

AppletViewer过去常常在没有安全沙箱的情况下启动applets,即使它们没有签名.现在它是相反的,有一个沙箱,没有办法让它接受签名的代码作为信任!

IDE似乎将策略文件应用于查看器,以使其在用户配置IDE时发挥作用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8844045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档