1

如果我想部署高权限的小程序,它们需要被签名。为此,会创建一个证书,然后使用 jarsigner 对 jar 文件进行签名。之后在 HTML 代码中必须指定我们之前签名的代码、代码库和存档(jar)。

但是,我编写了一个 servlet,它充当两件事:

  1. 它位于代码库指向的 URL 处,并为小程序提供类字节码。
  2. 同一个 servlet 还使用序列化与 applet 进行通信,因此,每当 applet 获得一个类时,它不知道它会转到最终返回到 servlet 的代码库。
几乎就像一个迷你 RMI 设置,但更简单。我希望你能看到这里面的力量。

不幸的是,对于签名的小程序,需要存档。现在 servlet 也能够加载一个 Certificate 对象并将其发送到 applet。所以这里是设置:在某一时刻小程序接收类字节码,它也有证书。如果小程序可以使用该证书实例化所有接收到的类,那就太好了(否则来自 jar 的代码已签名,而外部代码不会向用户提示讨厌的消息)。

所以我向 Java 爱好者提出的问题是:我是否可以 通过任何方式使用字节码数据和证书将类实例化为签名对象,以便插件弹出安全对话框,接受证书并提升对象的权限。我能找到的是,有一个类 CodeSource 接受代码库 URL 和证书,并且对签名过程至关重要。我不确定如何拦截小程序内的类加载以安装不是通过存档通过 JAR 文件获得的其他证书。

你说什么?谢谢一堆。

4

1 回答 1

0

我不相信使用即时生成的加载类。

话虽如此,使类具有完全访问权限的一种简单但危险的方法是调用 ..

System.setSecurityManager(null);

.. 在小程序 init() 的早期阶段。这在沙盒小程序中会失败,但会在受信任的小程序中工作。

实现所需结果的更好(更安全)方法是实现自定义安全管理器 - 仅向来自服务器的代码提供提升权限的安全管理器。

实施安全管理器可能看起来令人生畏,但很容易做到微不足道。有关示例,请参见 comp.lang.java.programming 对System.ext()线程的回复。

于 2011-01-13T06:46:59.677 回答