2

我制作了一个小程序,它需要访问用户的主目录。首先,我使用自签名证书对其进行签名,如果用户接受小程序安全提示,则一切正常。问题是要从他们的 Intranet 使用小程序的用户在他们的计算机上具有有限的权限。因此,如果用户接受安全提示并选择“不再询问”,则修改(无论它们存储在何处)都不会写入他们的计算机。相反,小程序会在下一次再次请求权限,并且客户不希望每次都被提示。

我试图通过不签署小程序并修改策略文件来解决这个问题:

grant codeBase "http://server:port/app/-" {
  permission java.io.FilePermission "${user.home}/-", "read, write, delete";
  permission java.util.PropertyPermission "user.home", "read";
};

但是即使我选择“不再询问”并且我自己在我的计算机上拥有管理权限,小程序现在每次都会提示许可。如果我能以某种方式使用策略文件让它工作,那么制作一个脚本来在将使用它的所有数百台计算机上编写策略文件将很容易。

我想问题是,可以以完全不提示用户的方式使用策略文件吗?无论如何,代码都受到用户的信任,因此让代码运行所有必要的东西就可以了。

如果仍然提示用户,拥有策略文件的目的是什么?然后它就像每次都有自签名小程序请求许可一样糟糕。

任何帮助或提示表示赞赏!

编辑:

我使用 keytool 导出了自签名证书,并使用 keytool 在虚拟机上将其导入到受信任的证书中。小程序仍然要求运行许可。我还尝试了以下方法:

  1. 选择“始终允许”,现在证书保存在“...Application Data\Sun\Java\Deployment\security\trusted.certs”
  2. 使用控制面板->Java->安全->管理证书->导出导出证书
  3. 删除证书控制面板->Java->安全->管理证书->删除
  4. 使用 keytool 导入之前导出的证书

即使证书应该相同,小程序仍会请求许可。但是,如果我在记事本++ 中打开trusted.cert,我可以看到,如果通过选择“始终允许”自动安装证书,与使用keytool 导入证书相比,某些二进制字符会有所不同。

我发现唯一可行的选择是在一台机器上选择“始终允许”并复制整个trusted.cert 文件并替换目标机器上的trusted.cert 文件。这样它就认为用户已经选择了“始终允许”。这似乎不是一个好的解决方案。

Edit2: 复制整个trusted.cert 文件仅在我的虚拟机中有效。使用我的trusted.cert 的其他人在没有先授权的情况下无法运行该小程序。也许 Java 不能胜任这项任务,也许闪存没有那么受限。

4

0 回答 0